https://www.acmicpc.net/problem/2075
2075번: N번째 큰 수
첫째 줄에 N(1 ≤ N ≤ 1,500)이 주어진다. 다음 N개의 줄에는 각 줄마다 N개의 수가 주어진다. 표에 적힌 수는 -10억보다 크거나 같고, 10억보다 작거나 같은 정수이다.
www.acmicpc.net
문제 풀이 방식
- 나의 생각
- ArrayList에 입력받은 숫자를 모두 넣는다.
- reverseSort한다.
- n번째 큰수를 찾는 것이므로 내림차순 정렬된 list에서 n-1번째 숫자를 찾는다.
- 해당 방법은 시간이 좀 더 오래걸린다.
- 찾아본 풀이
- 우선순위큐를 최대힙으로 변경해서 큐에 입력된 숫자를 넣는다.
- 반복문을 통해 n-1번째까지 큐에서 poll해준다.
- 반복문이 끝나고 마지막에 한번 poll해주면 n번째 큰수를 출력할 수 있다.
수도코드
int n = input();
PriorityQueue<Integer> pq = new PriorityQueue<Integer>(Collections.reverseOrder());
for(int i=0; i<n*m; i++) {
pq.add(input());
}
for(int i=0; i<n-1; i++) {
pq.poll();
}
print(pq.poll());
'알고리즘' 카테고리의 다른 글
백준1182_부분수열의 합 (java) (0) | 2021.11.14 |
---|---|
백준10026_적록색약 (java) (0) | 2021.11.11 |
백준1158_요세푸스 문제 (java) (0) | 2021.11.08 |
백준1764_듣보잡 (java) (0) | 2021.11.08 |
백준1620_나는야 포켓몬 마스터 이다솜 (java) (0) | 2021.09.30 |