Home > Algorithm > BOJ > [BOJ] 1927๋ฒˆ ์ตœ์†Œ ํž™ / C++

[BOJ] 1927๋ฒˆ ์ตœ์†Œ ํž™ / C++
C++ ๋ฐฑ์ค€ BOJ ์•Œ๊ณ ๋ฆฌ์ฆ˜ Algorithm

๐Ÿ”— ์ตœ์†Œ ํž™

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


๐Ÿ“Œ ๋ฌธ์ œ ์š”์•ฝ

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

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

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


๐Ÿ’ก ์ ‘๊ทผ ๋ฐฉ๋ฒ•

c++ STL ์ปจํ…Œ์ด๋„ˆ ์ค‘ priority_queue ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ์†Ÿ๊ฐ’์ด ์ตœ์ƒ์œ„ ๊ฐ’์ด ๋˜๋„๋ก ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•˜๋„๋ก ํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋‚˜๊ฐ”๋‹ค.
priority_queue๋Š” ํž™๊ตฌ์กฐ๋ฅผ ๋‚ด๋ถ€์— ๊ฐ€์ง€๋Š” queue์ธ๋ฐ
์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ดํ›„์— ์ •๋ฆฌ๋ฅผ ํ•ด๋ด์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค.


โš ๏ธ ์ฒ˜์Œ์— ํ–ˆ๋˜ ์‹ค์ˆ˜


๐Ÿ’ป ์ฝ”๋“œ

#include <iostream>
#include <queue>
#include <functional>
using namespace std;

int N;


priority_queue<int, vector<int>, greater<int>> heap;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    
    cin >> N;

    for(int i = 0; i < N; ++i)
    {
        int input;
        cin >> input;

        if(input == 0)
        {
            if(heap.size() == 0)
                cout << "0" << '\n';
            else
            {
                cout << heap.top() << '\n';
                heap.pop();
            }
        }
        else
        {
            heap.push(input);
        }
            
    }

    return 0;
}