99클럽 코테 스터디 20일차 TIL
💙 JAVA 비기너
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Collections;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
PriorityQueue<Integer> heap = new PriorityQueue<>(Collections.reverseOrder());
int N = Integer.parseInt(br.readLine());
for(int i=0; i<N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
while (st.hasMoreTokens()) {
heap.add(Integer.parseInt(st.nextToken()));
}
}
br.close();
for(int i=1; i<N; i++) {
heap.poll();
}
bw.write(String.valueOf(heap.peek()));
bw.flush();
bw.close();
}
}
2차배열의 값을 모두 힙에 넣어주고 N번째 값을 반환하면 되는 문제다.
먼저 Heap을 생성할 때 Collections.reverseOrder()
를 넣어줘서 우선순위 큐에 들어오는 모든 값을 내림차순으로 정렬하게 만들었다.
PriorityQueue<Integer> heap = new PriorityQueue<>(Collections.reverseOrder());
그리고 오랜만에 StringTokenizer
를 이용하여 값 하나하나를 heap
에 넣어줬다.
마지막으로 N번째 값이 헤드노드가 될 수 있도록 N-1번을 heap.poll();
을 해주어 없애주고 마지막 N번째 값을 heap.peek();
통해 반환하여 출력해줬다.
(이 때 heap.peek();
대신 heap.poll();
을 써줘도 된다.)