코딩테스트/백준

[백준 2075] N번째 큰 수 (Java) - 정렬, 우선순위 큐

imachill7guy 2025. 5. 17. 22:39

https://www.acmicpc.net/problem/2075

N번째 큰 수

문제

N×N의 표에 수 N2개 채워져 있다. 채워진 수에는 한 가지 특징이 있는데, 모든 수는 자신의 한 칸 위에 있는 수보다 크다는 것이다. N=5일 때의 예를 보자.

12 7 9 15 5
13 8 11 19 6
21 10 26 31 16
48 14 28 35 25
52 20 32 41 49

이러한 표가 주어졌을 때, N번째 큰 수를 찾는 프로그램을 작성하시오. 표에 채워진 수는 모두 다르다.

입력

첫째 줄에 N(1 ≤ N ≤ 1,500)이 주어진다. 다음 N개의 줄에는 각 줄마다 N개의 수가 주어진다. 표에 적힌 수는 -10억보다 크거나 같고, 10억보다 작거나 같은 정수이다.

출력

첫째 줄에 N번째 큰 수를 출력한다.

예제 입력 1 복사

5
12 7 9 15 5
13 8 11 19 6
21 10 26 31 16
48 14 28 35 25
52 20 32 41 49

예제 출력 1 복사

35

풀이

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Comparator;
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));
        int N = Integer.parseInt(br.readLine());
        PriorityQueue<Integer> pq = new PriorityQueue<>(Comparator.reverseOrder());

        StringTokenizer st;
        for (int i=0; i<N; i++){
            st = new StringTokenizer(br.readLine());
            for (int j=0; j<N; j++){
                pq.offer(Integer.parseInt(st.nextToken()));
            }
        }

        int count = 0;
        int result = 0;
        while (count<N){
            count++;
            result = pq.poll();
        }

        System.out.println(result);
    }
}
  • 정렬, 우선순위 큐를 활용한 문제
  • NxN 표의 숫자를 입력받아서, N번째 큰 수를 출력하면 된다.
  • 내림차순 우선순위 큐를 초기화 한 후, 큐에 NxN개의 수를 넣어준다.
  • count=0으로 초기화 해준 뒤, count<N을 만족하는 동안 count를 1씩 증가시켜주면서, 큐에서 poll 한 값을 result에 업데이트 시켜준다.
  • while문을 빠져나오면 N번째로 큰 수를 찾은 상태이므로, result를 출력해주면 된다