[Boj_1927] ์ตœ์†Œ ํž™

๐Ÿ“Ž ๋ฌธ์ œ ๋งํฌ

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

 

1927๋ฒˆ: ์ตœ์†Œ ํž™

์ฒซ์งธ ์ค„์— ์—ฐ์‚ฐ์˜ ๊ฐœ์ˆ˜ N(1 ≤ N ≤ 100,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ N๊ฐœ์˜ ์ค„์—๋Š” ์—ฐ์‚ฐ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ x๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋งŒ์•ฝ x๊ฐ€ ์ž์—ฐ์ˆ˜๋ผ๋ฉด ๋ฐฐ์—ด์— x๋ผ๋Š” ๊ฐ’์„ ๋„ฃ๋Š”(์ถ”๊ฐ€ํ•˜๋Š”) ์—ฐ์‚ฐ์ด๊ณ , x๊ฐ€ 0

www.acmicpc.net

 

โ–ธ ๋ฌธ์ œ

๋„๋ฆฌ ์ž˜ ์•Œ๋ ค์ง„ ์ž๋ฃŒ๊ตฌ์กฐ ์ค‘ ์ตœ์†Œ ํž™์ด ์žˆ๋‹ค. ์ตœ์†Œ ํž™์„ ์ด์šฉํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—ฐ์‚ฐ์„ ์ง€์›ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

  1. ๋ฐฐ์—ด์— ์ž์—ฐ์ˆ˜ x๋ฅผ ๋„ฃ๋Š”๋‹ค.
  2. ๋ฐฐ์—ด์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๊ณ , ๊ทธ ๊ฐ’์„ ๋ฐฐ์—ด์—์„œ ์ œ๊ฑฐํ•œ๋‹ค.

ํ”„๋กœ๊ทธ๋žจ์€ ์ฒ˜์Œ์— ๋น„์–ด์žˆ๋Š” ๋ฐฐ์—ด์—์„œ ์‹œ์ž‘ํ•˜๊ฒŒ ๋œ๋‹ค.

 

โ–ธ ์ž…๋ ฅ

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

 

โ–ธ ์ถœ๋ ฅ

์ž…๋ ฅ์—์„œ 0์ด ์ฃผ์–ด์ง„ ํšŸ์ˆ˜๋งŒํผ ๋‹ต์„ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ ๋ฐฐ์—ด์ด ๋น„์–ด ์žˆ๋Š” ๊ฒฝ์šฐ์ธ๋ฐ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋ผ๊ณ  ํ•œ ๊ฒฝ์šฐ์—๋Š” 0์„ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

 

๐Ÿ“ ๋ฌธ์ œ ์ •๋ณด

  • ๐Ÿฅˆ ๋ฌธ์ œ ๋ ˆ๋ฒจ : ์‹ค๋ฒ„ 2
  • ๐Ÿ””  ๋ฌธ์ œ ์œ ํ˜• : ์ž๋ฃŒ๊ตฌ์กฐ, ์šฐ์„ ์ˆœ์œ„ ํ
  • ๐Ÿ’ฌ  ํ’€์ด ์–ธ์–ด : JAVA

 

๐Ÿค” ๋ฌธ์ œ ํ’€์ด

  • ์šฐ์„ ์ˆœ์œ„ ํ(Priority Queue)๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค.
  • PriorityQueue<Integer> pq = new PriorityQueue<>();
  • ์œ„์˜ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•ด ์ฃผ๋ฉด ์ž‘์€ ์ˆซ์ž๊ฐ€ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋˜๋ฏ€๋กœ, ์ตœ์†Œ ํž™์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ” ํž™(Heap)์ด๋ž€ ?

  • ์ตœ์†Ÿ๊ฐ’ ๋˜๋Š” ์ตœ๋Œ“๊ฐ’์„ ๋น ๋ฅด๊ฒŒ ์ฐพ์•„๋‚ด๊ธฐ ์œ„ํ•ด ์™„์ „์ด์ง„ํŠธ๋ฆฌ ํ˜•ํƒœ๋กœ ๋งŒ๋“ค์–ด์ง„ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

๐Ÿ”ธ ํž™์˜ ์ข…๋ฅ˜

  • ์ตœ์†Œ ํž™(Min Heap)
    • ๋ถ€๋ชจ ๋…ธ๋“œ ๊ฐ’์ด ์ž์‹ ๋…ธ๋“œ์˜ ๊ฐ’๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค.
    • ๋ฃจํŠธ ๊ฐ’์€ ์ €์žฅ๋œ ์›์†Œ ์ค‘ ๊ฐ€์žฅ ์ž‘๋‹ค.
  • ์ตœ๋Œ€ ํž™(Max Heap)
    • ๋ถ€๋ชจ ๋…ธ๋“œ ๊ฐ’์ด ์ž์‹ ๋…ธ๋“œ์˜ ๊ฐ’๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๋‹ค.
    • ๋ฃจํŠธ ๊ฐ’์€ ์ €์žฅ๋œ ์›์†Œ ์ค‘ ๊ฐ€์žฅ ํฌ๋‹ค.

๐Ÿ” ์šฐ์„ ์ˆœ์œ„ ํ(Priority Queue)๋ž€ ?

  • ์ผ๋ฐ˜ Queue๊ฐ€ FIFO(First In First Out)์˜ ํŠน์ง•์„ ๊ฐ€์ง„ ๊ฒƒ๊ณผ ๋‹ค๋ฅด๊ฒŒ,
  • ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์˜จ ์ˆœ์„œ์— ์ƒ๊ด€์—†์ด ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋จผ์ € ๋‚˜์˜ค๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.
  • ๋‚ด๋ถ€ ์š”์†Œ๋Š” ํž™์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์ด์ง„ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.
  • ๋‚ด๋ถ€ ๊ตฌ์กฐ๊ฐ€ ํž™์œผ๋กœ ๊ตฌ์„ฑ๋„์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(NLogN)์ด๋‹ค.

 

โœ” ์ตœ์ข… ์ฝ”๋“œ

๋ฉ”๋ชจ๋ฆฌ : 25656KB
์‹œ๊ฐ„ : 280ms
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.PriorityQueue;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        int n = Integer.parseInt(br.readLine()); // ์—ฐ์‚ฐ์˜ ๊ฐœ์ˆ˜
        PriorityQueue<Integer> pq = new PriorityQueue<>(); // ์˜ค๋ฆ„์ฐจ์ˆœ ๊ธฐ์ค€
        for (int i = 0; i < n; i++) {
            int num = Integer.parseInt(br.readLine());

            if (num == 0) { // ๋“ค์–ด์˜ค๋Š” ๊ฐ’์ด 0์ด๋ผ๋ฉด
                if (pq.isEmpty()) { // ๋ฐฐ์—ด์ด ๋น„์–ด์žˆ๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด
                    sb.append(0).append("\n"); // 0 ์ถœ๋ ฅ
                } else { // ๋ฐฐ์—ด์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’ ์ถœ๋ ฅํ•˜๊ณ  ๊ทธ ๊ฐ’ ์ œ๊ฑฐ
                    sb.append(pq.poll()).append("\n");
                }
            } else { // ๋“ค์–ด์˜ค๋Š” ๊ฐ’์ด 0์ด ์•„๋‹ˆ๋ผ๋ฉด
                pq.offer(num); // ๋ฐฐ์—ด์— ๊ฐ’ ์ถ”๊ฐ€
            }
        }
        System.out.println(sb.toString());
    }
}


 

 

๐Ÿ“ ํ•จ๊ป˜ ํ’€์–ด๋ณด๋ฉด ์ข‹์€ ๋ฐฑ์ค€ ๋ฌธ์ œ