문제 내용은 NxN 타입의 입력을 받아서 N 번째로 큰 수를 출력해야 하는데, 이미지에서 예제 입력의 N번째 큰 값은 35인데 큰 수 기준 정렬해보면 52 – 49 – 48 – 41 – 35 이기 때문에 5번째 큰 값인 35가 출력되게 되는 것이다.
문제 내용은 채워진 수에 특징이 어쩌고 저쩌고 하지만, 결론은 전체 값 중에 N번째 큰 값만 가져오면 끝이다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Comparator;
import java.util.PriorityQueue;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int count = Integer.parseInt(br.readLine());
PriorityQueue<Integer> queue = new PriorityQueue<>(Comparator.reverseOrder());
for (int i = 0; i < count; i++) {
String[] split = br.readLine().split(" ");
for (int j = 0; j < split.length; j++) {
queue.add(Integer.parseInt(split[j]));
}
}
for (int i = 0; i < count - 1; i++) {
queue.poll();
}
System.out.println(queue.poll());
}
}
문제를 풀어보자면 우선 순위큐를 이용해주면 넣는 족족 자동 정렬이 되기 때문에, 역순으로 우선순위큐를 선언한 후 입력받은 값을 모두 넣어준 뒤 큐에서 N번째 값까지 계속 뽑다가 N번째만 출력해주고 끝내면 끝이다.
문제를 풀다 보면 설명에서 한 칸 위에 있는 값이 항상 크고 말고 이런 내용은 아무 의미가 없기 때문에 핵심만 짚어내서 풀어내야 시간을 아낄 수 있다.
Leave a Reply