PS(Problem Solving)/soleved.ac CLASS

solved.ac CLASS 3 11286 절대값 힙

LiaLi_1997 2022. 7. 17. 16:53

문제링크 : https://www.acmicpc.net/problem/11286

 

1. 입력 관련

 

힙과 관련된 문제였다. 힙을 직접 구현하지 않고 힙의 구조를 가지고 있는 priority queue 를 사용했다.

 

절대값이 가장 작다는 것은 0과 가장 가깝다는 것이다. 즉 -1 과 3 을 비교 했을 때 -1 이 더 가깝다는 것이다.

즉 가장 0과 가까운 수를 결정할 때 부호는 영향을 주지 않는다. 하지만 출력을 할 때는 부호를 신경써야 하기 떄문에 아래와 같은 pair 를 둔다.

 

pair<수, 부호> 

 

소스는 아래와 같다.

#include <iostream>
#include <queue>

using namespace std;

int N, inp;
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
pair<int, int> pqTop;

int main(void){
    
    ios_base::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);
    
    cin >> N;
    for (int i = 0; i < N; i++) {
        cin >> inp;
        if(inp < 0) pq.push(make_pair(-inp, -1));
        else if(inp > 0) pq.push(make_pair(inp, 1));
        else {
            if(pq.empty()) cout << 0 << '\n'; // pq 가 비었는데 pop 요청이 들어올 경우 0 출력
            else{
                cout << pq.top().first * pq.top().second << '\n';
                pq.pop();
            }
        }
    }
    
    return 0;
}