[백준] 2075: N번째 큰 수 - JAVA

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

풀이

N * N 개의 숫자 중에 N번째로 큰 숫자를 찾아야 한다.

우선순위큐를 사용해 정렬방식을 내림차순으로 하여 N개만큼 뽑는 방법이 있다.

이때는 Collections.reverseOrder()를 사용해야 한다.

나는 오름차순 우선순위큐의 사이즈를 N으로 유지시키면서 값을 집어넣고 마지막에 하나를 뽑기로 했다.

이렇게하면 가장 큰 수 N개가 우선순위큐에 들어있게 되고, poll하면 N번째로 큰 숫자가 나온다.


메모리: 244104KB

시간: 944ms

언어: Java 11

코드

import java.util.*;
import java.io.*;

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());

        PriorityQueue<Integer> pq = new PriorityQueue<>();
        for (int i = 0; i < N; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            for (int j = 0; j < N; j++) {
                int tmp = Integer.parseInt(st.nextToken());
                pq.add(tmp);
                if (pq.size() > N) {
                    pq.poll();
                }
            }
        }

        System.out.println(pq.poll());
    }

}