본문 바로가기
🧩 Algorithm

BJ2075 : N번째 큰 수

by iirin 2023. 2. 8.

 

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

 

2075번: N번째 큰 수

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

www.acmicpc.net


접근 방법

  • 가볍게 풀 수 있는 문제인가 싶었지만 기본 배열로는 풀 수가 없다.
  • 함께 공부하는 동료의 조언으로 우선순위 큐를 시도하였다.
  • 우선순위 큐를 활용하여 풀면 시간복잡도가 유리하여 편리하게 풀 수 있다.
  • 참조링크
👉 우선순위 큐의 시간 복잡도
우선순위 큐는 완전 이진트리 형태의 힙을 이용해 구현할 수 있다.
우선순위 큐의 삽입과 삭제는 𝑂(𝑙𝑜𝑔𝑁)의 시간 복잡도를 가진다.
우선순위 큐를 이용한 정렬은 𝑂(𝑁𝑙𝑜𝑔𝑁)의 시간 복잡도를 가진다

 

풀이

  • 메모리 273980 KB / 836 ms
import java.util.*;
import java.io.*;

class Main{
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        
        int n = Integer.parseInt(st.nextToken());
        
        PriorityQueue<Integer> q = new PriorityQueue(Collections.reverseOrder());
        
        for (int i=0; i<n; i++) {
            st = new StringTokenizer(br.readLine());
            for (int j=0; j<n; j++) {
                q.add(Integer.parseInt(st.nextToken()));
            }
        }
        
        int answer = 0;
        
        for (int k=0; k<n; k++) {
            answer = q.poll();
        }
        
        System.out.println(answer);
    }
}