๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜

[Java] BOJ 11279 ์ตœ๋Œ€ ํž™

by ๐ŸŠ๊ทค๐ŸŠ 2024. 8. 11.

๋ฌธ์ œ 

๋ฌธ์ œ ๋งํฌ https://www.acmicpc.net/problem/11279

  • ๋„๋ฆฌ ์ž˜ ์•Œ๋ ค์ง„ ์ž๋ฃŒ๊ตฌ์กฐ ์ค‘ ์ตœ๋Œ€ ํž™์ด ์žˆ๋‹ค. ์ตœ๋Œ€ ํž™์„ ์ด์šฉํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—ฐ์‚ฐ์„ ์ง€์›ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.
    1. ๋ฐฐ์—ด์— ์ž์—ฐ์ˆ˜ x๋ฅผ ๋„ฃ๋Š”๋‹ค.
    2. ๋ฐฐ์—ด์—์„œ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๊ณ , ๊ทธ ๊ฐ’์„ ๋ฐฐ์—ด์—์„œ ์ œ๊ฑฐํ•œ๋‹ค.
  • ํ”„๋กœ๊ทธ๋žจ์€ ์ฒ˜์Œ์— ๋น„์–ด์žˆ๋Š” ๋ฐฐ์—ด์—์„œ ์‹œ์ž‘ํ•˜๊ฒŒ ๋œ๋‹ค.
  • ์ฒซ์งธ ์ค„์— ์—ฐ์‚ฐ์˜ ๊ฐœ์ˆ˜ N(1 ≤ N ≤ 100,000)์ด ์ฃผ์–ด์ง„๋‹ค.
  • ๋‹ค์Œ N๊ฐœ์˜ ์ค„์—๋Š” ์—ฐ์‚ฐ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ x๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋งŒ์•ฝ x๊ฐ€ ์ž์—ฐ์ˆ˜๋ผ๋ฉด ๋ฐฐ์—ด์— x๋ผ๋Š” ๊ฐ’์„ ๋„ฃ๋Š”(์ถ”๊ฐ€ํ•˜๋Š”) ์—ฐ์‚ฐ์ด๊ณ , x๊ฐ€ 0์ด๋ผ๋ฉด ๋ฐฐ์—ด์—์„œ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๊ณ  ๊ทธ ๊ฐ’์„ ๋ฐฐ์—ด์—์„œ ์ œ๊ฑฐํ•˜๋Š” ๊ฒฝ์šฐ์ด๋‹ค.
  • ์ž…๋ ฅ๋˜๋Š” ์ž์—ฐ์ˆ˜๋Š” 231๋ณด๋‹ค ์ž‘๋‹ค.
  • ์ž…๋ ฅ์—์„œ 0์ด ์ฃผ์–ด์ง„ ํšŸ์ˆ˜๋งŒํผ ๋‹ต์„ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ ๋ฐฐ์—ด์ด ๋น„์–ด ์žˆ๋Š” ๊ฒฝ์šฐ์ธ๋ฐ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋ผ๊ณ  ํ•œ ๊ฒฝ์šฐ์—๋Š” 0์„ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

์•„์ด๋””์–ด

  • PriorityQueue๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ heap์„ ๊ตฌํ˜„ํ–ˆ๋‹ค.
  • ๊ธฐ๋ณธ heap์€ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ์€ ๊ฒƒ์ด ์ œ์ผ ์œ„์— ์˜ค๋ฏ€๋กœ ๋ฐ˜๋Œ€๋กœ ์ •๋ ฌํ•˜๋ฉด ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ๊ฒƒ์ด ์ œ์ผ ์œ„์— ์˜จ๋‹ค.

๊ฒช์€ ์‹œํ–‰์ฐฉ์˜ค

  • X

์ตœ์†Œ ํž™๊ณผ ๋น„์Šทํ•˜๊ฒŒ ํ’€๋ฉด๋ผ์„œ ์ข‹์•˜๋‹ค...!

 

์ฝ”๋“œ

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

public class BOJ11279 {
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        // ์ปฌ๋ ‰์…˜์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์œผ๋ฉด remove๋˜๋Š” peek์˜ ๊ฐ’์ด minHeap์˜ ์ตœ์†Ÿ๊ฐ’์ด ๋จ
        // Primary Queue๋Š” ์šฐ์„ ์ˆœ์œ„ ํ๋กœ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋‚ฎ์€ ๊ฐ’์ด ๋จผ์ € ๋‚˜์˜ค๊ฒŒ ๋˜์–ด์žˆ์Œ
        // ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ๋‹ค๋Š” ๊ฒƒ์€ Integer๋ฅผ ๋„ฃ์—ˆ์„ ๋•Œ, ์ตœ์†Ÿ๊ฐ’์œผ๋กœ ํŒ๋‹จ๋จ
        // ๋”ฐ๋ผ์„œ ๋ฐ˜๋Œ€๋กœ ์ •๋ ฌํ•˜๋ฉด ์ตœ๋Œ€ํž™์ด ๋˜์–ด ์ตœ๋Œ“๊ฐ’์„ ์ถœ๋ ฅํ•จ
        PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Collections.reverseOrder());

        // ์—ฐ์‚ฐ์˜ ๊ฐœ์ˆ˜
        int N = Integer.parseInt(br.readLine());

        // ์—ฐ์‚ฐ์˜ ๊ฐœ์ˆ˜๋งŒํผ ๋ฐ˜๋ณต
        for(int i = 0; i < N; i++){
            int x = Integer.parseInt(br.readLine());

            // ๋งŒ์•ฝ ์ž…๋ ฅ๋ฐ›์€ ์ˆ˜๊ฐ€ 0์ผ๋•Œ
            if(x == 0){
                // maxHeap์ด ๋น„์–ด์žˆ๋‹ค๋ฉด
                if(maxHeap.isEmpty()){
                    // 0์„ ์ถœ๋ ฅ
                    sb.append(0 + "\n");
                }
                // ๋งŒ์•ฝ maxHeap์ด ๋น„์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด
                else{
                    // maxHeap์˜ ๊ผญ๋Œ€๊ธฐ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๊ณ 
                    sb.append(maxHeap.peek() + "\n");

                    // maxHeap์˜ ๋งจ ์œ„์˜ ๊ฐ’์„ ์ œ๊ฑฐ
                    maxHeap.poll();
                }
            }
            // ๋งŒ์•ฝ ์ž…๋ ฅ๋ฐ›์€ ์ˆ˜๊ฐ€ 0์ด ์•„๋‹ˆ๋ผ๋ฉด
            else{
                // maxHeap์— x๋ฅผ ์ถ”๊ฐ€
                maxHeap.add(x);
            }
        }

        System.out.println(sb);
        
    }
}