๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ ์•Œ๊ณ ๋ฆฌ์ฆ˜/BOJ

[C++/BOJ] 11286 : ์ ˆ๋Œ“๊ฐ’ ํž™ (์ž๋ฃŒ๊ตฌ์กฐ)

by xxilliant 2023. 5. 2.
728x90
๋ฐ˜์‘ํ˜•

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

 

๋ฌธ์ œ

์ ˆ๋Œ“๊ฐ’ ํž™์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—ฐ์‚ฐ์„ ์ง€์›ํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

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

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

์ž…๋ ฅ

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

์ถœ๋ ฅ

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


 

์šฐ์„ ์ˆœ์œ„ ํ๋กœ ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

 

ํ•œ๊ฐ€์ง€ ์œ ์˜ํ•  ์ ์€,

 

priority_queue๋Š” ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ top์œผ๋กœ ๋‘๋„๋ก ์ž๋™์ •๋ ฌ๋˜๊ธฐ ๋•Œ๋ฌธ์—,
 
์ด ๋ฌธ์ œ๋ฅผ ์œ„ํ•ด์„œ๋Š” ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜๋ฅผ top์œผ๋กœ ๋‘๋Š” ์ •๋ ฌ์„ ์œ„ํ•œ struct๋ฅผ ๋”ฐ๋กœ ์ง€์ •ํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค!
 
 
๊ทธ๋ž˜์„œ ์ž๋™์ •๋ ฌ ํ›„ top์„ ์ถœ๋ ฅํ•ด์ฃผ๊ณ  popํ•ด์ฃผ๋ฉด, ๋ฐฉ๊ธˆ ์ถœ๋ ฅํ–ˆ๋˜ top์ด ํŠ€์–ด๋‚˜์˜ต๋‹ˆ๋‹ค

 

 

๋‚˜์˜ ํ’€์ด

#include <iostream>
#include <string>
#include <queue>
#include <vector>
using namespace std;

struct comp{
    bool operator()(int a,int b){
        // ์›๋ž˜ ์šฐ์„ ์ˆœ์œ„ํ๋Š” ๊ฐ€์žฅ ํฐ ์ˆ˜๊ฐ€ top.
        // top์— ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜๊ฐ€ ์™€์•ผํ•˜๋ฏ€๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ
        if(abs(a)==abs(b)){
            return a > b;
        }
        else
            return abs(a) > abs(b);
    }
};

int main(){
    priority_queue< int, vector<int>, comp > pq;
    int n;
    int x;
    cin >> n;
    for (int i = 0; i < n; ++i){
        cin >> x;
        if(x == 0){
            if(pq.empty()) cout << 0 << '\n';
            else {
                cout << pq.top() << '\n';
                pq.pop();
            }
        }
        else pq.push(x);
    }
}

 

728x90
๋ฐ˜์‘ํ˜•