Algorithm/Problem Solving

[BOJ] 2075번 N번째 큰 수 - JAVA(μžλ°”)

gangintheremark 2023. 10. 16. 22:53
728x90
πŸ’‘ PriorityQueue
 

2075번: N번째 큰 수

첫째 쀄에 N(1 ≤ N ≤ 1,500)이 μ£Όμ–΄μ§„λ‹€. λ‹€μŒ N개의 μ€„μ—λŠ” 각 μ€„λ§ˆλ‹€ N개의 μˆ˜κ°€ μ£Όμ–΄μ§„λ‹€. ν‘œμ— 적힌 μˆ˜λŠ” -10얡보닀 ν¬κ±°λ‚˜ κ°™κ³ , 10얡보닀 μž‘κ±°λ‚˜ 같은 μ •μˆ˜μ΄λ‹€.

www.acmicpc.net

μš°μ„ μˆœμœ„ 큐λ₯Ό κ΅¬ν˜„ν•˜λŠ” 방식인 νž™(Heap)μ—μ„œ 데이터λ₯Ό λ„£μ—ˆλ‹€κ°€ κΊΌλ‚΄λŠ” μž‘μ—…μ€ μ •λ ¬ν•˜λŠ” μž‘μ—…κ³Ό λ™μΌν•˜λ‹€. 이 경우 μ‹œκ°„λ³΅μž‘λ„λŠ” O(NlogN)이 λœλ‹€.

 

λ”°λΌμ„œ μˆœμ„œ 상관없이 μ£Όμ–΄μ§„ 데이터λ₯Ό μš°μ„ μˆœμœ„ 큐에 λ„£κΈ°λ§Œ ν•˜λ©΄ λ£¨νŠΈλ…Έλ“œλŠ” κ°€μž₯ μš°μ„ μˆœμœ„κ°€ 큰 값을 κ°€μ§€κ³  λ¨Όμ € μ œκ±°λœλ‹€. λ¬Έμ œμ—μ„œλŠ” N번째둜 큰 수λ₯Ό μ°ΎλŠ” 문제둜 Collections.reverseOrder()λ©”μ„œλ“œλ₯Ό ν™œμš©ν•˜μ—¬ 높은 μˆ«μžκ°€ μš°μ„ μˆœμœ„κ°€ 될 수 μžˆλ„λ‘ ν•œλ‹€.

import java.util.Collections;
import java.util.PriorityQueue;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);

        int n = s.nextInt();

        PriorityQueue<Integer> q = new PriorityQueue<>(Collections.reverseOrder());

        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                q.offer(s.nextInt());
            }
        }

        int count = 1;
        while(count != n) {
            q.poll();
            count++;
        }
        System.out.println(q.peek());

    }
}
728x90