📌 고정 게시글

📢 공지합니다

이 게시글은 메인 페이지에 항상 고정되어 표시됩니다.

최코딩의 개발

[백준 2075번] N번째 큰수 본문

코딩테스트

[백준 2075번] N번째 큰수

seung_ho_choi.s 2025. 1. 16. 20:13
728x90

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

package datastructure;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class DataStructure2075 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        PriorityQueue<Long> queue = new PriorityQueue<>();

        int N = Integer.parseInt(br.readLine());

        for (int i = 0; i < N; i++) {
            st = new StringTokenizer(br.readLine());
            for (int j = 0; j < N; j++) {
                queue.add(Long.parseLong(st.nextToken()));
            }
            if (queue.size() > N) {
                while (queue.size() != N) {
                    queue.poll();
                }
            }
        }

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

 

전형적인 우선순위 큐 문제로 접근할 수 있다. 처음에는 모든 데이터를 List에 넣어 오름차순 정렬한 뒤 정답을 출력하려 했으나, 메모리 초과가 발생할 가능성이 있어 우선순위 큐를 활용하기로 했다.

예를 들어, N=5N = 5일 때, 첫 번째 차례에 5개의 데이터를 우선순위 큐에 넣는다. 이후 두 번째 차례에서는 새로운 데이터를 추가하면서, 큐의 크기가 NN을 초과하지 않도록 가장 작은 값을 제거해 나간다.

이 방식을 사용하면 메모리 초과 없이 문제를 해결할 수 있다. 마지막에는 queue.poll()을 호출해 정답을 출력하면 된다. 간단하면서도 효율적인 풀이 방식이다.

728x90

'코딩테스트' 카테고리의 다른 글

[백준 2096번] 내려가기  (0) 2025.03.17
코테 대비 루비 문법 공부하기!  (0) 2025.01.23