본문 바로가기
코딩테스트 준비/백준

[백준] 11279번 - 최대힙 [Java]

by mwzz6 2025. 1. 2.

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

 

[백준] 11279번 - 최대힙 [Java]
[백준] 11279번 - 최대힙 [Java]


1.  아이디어

 

자바에서 힙을 구현하는 PriorityQueue을 이용하면 간단하게 구현할 수 있다.


2. 문제풀이

 

PriorityQueue는 오름차순으로 정렬되므로 바로 사용하면 최소힙이 된다. 이를 내림차순으로 정렬되는 최대힙으로 사용하기 위해 생성자에 Collections.reverseOrder() 메서드로 정렬 기준을 바꿔주었다.

add 메서드와 poll 메서드로 삽입, 삭제를 구현했다.


3. 코드

 

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringBuilder sb = new StringBuilder();

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

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

        for (int i = 0; i < N; i++) {
            int x = Integer.parseInt(br.readLine());

            if (x > 0) pq.add(x);
            else {
                if (pq.isEmpty()) sb.append(0).append("\n");
                else sb.append(pq.poll()).append("\n");
            }
        }

        bw.write(sb.toString());
        bw.flush();
    }
}

4. 후기