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

[Java] BOJ 1927 ์ตœ์†Œ ํž™

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

๋ฌธ์ œ 

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

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

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

  • ์ตœ์†Œ ํž™ ๋ฌธ์ œ๊ฐ€ PriorityQueue๋ฅผ ์„ค๋ช…ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.
  • Priority Queue๊ฐ€ ์šฐ์„ ์ˆœ์œ„ ํ๋กœ, ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋‚ฎ์€ ๊ฐ’์ด ๋จผ์ € ๋‚˜์˜ค๊ฒŒ ๋˜์–ด์žˆ๋Š”๋ฐ, ์ด ๋ฌธ์ œ์—์„œ Integer๋ฅผ ๋„ฃ์—ˆ์„ ๋•Œ ์ˆซ์ž๊ฐ€ ์ž‘์„ ์ˆ˜๋ก ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ๋‹ค๊ณ  ํŒ๋‹จ๋˜์–ด ์œ„๋กœ ์˜ฌ๋ผ๊ฐ„๋‹ค.
  • ๋”ฐ๋ผ์„œ ๋งจ ์œ„์˜ ๊ฐ’์ด ์ตœ์†Ÿ๊ฐ’์ด ๋œ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ 0์ด ๋“ค์–ด์™”์„๋•Œ PriorityQueue๊ฐ€ ๋น„์–ด์žˆ๋‹ค๋ฉด 0์„ ์ถœ๋ ฅํ•˜๊ฒŒํ•˜๊ณ  ๋น„์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด PriorityQueue์˜ ๋งจ ์œ„ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ์ˆซ์ž๊ฐ€ ๋“ค์–ด์˜ค๋ฉด PriorityQueue์— ๋„ฃ๋Š”๋‹ค.

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

  • X

๋‚˜๋ฆ„ ์ด๋ฌธ์ œ๋Š” PriorityQueue๋ผ๋Š” ๊ฐœ๋…์„ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์˜€๋‹ค!

์ฝ”๋“œ

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

public class BOJ1927 {
    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> minHeap = new PriorityQueue<>();

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

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

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

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

        System.out.println(sb);
    }
}