백준 11286, 우선순위 큐(priority_queue) 최대 힙, 최소 힙 in C++ - (3)

Purple·2021년 10월 30일
0

문제

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

  • 최소 힙을 간단하게 적용하면 되는 문제가 아니다. 절대값과 실제값 두개의 비교기준을 생각하여야 하기때문에, 연산자 오버로딩을 통해 경우의 수를 고려하여 작성한다.

코드

#include <bits/stdc++.h>

using namespace std;

struct Data{
    int val, val_abs;

    Data(int a, int b) {
        val = a;
        val_abs = b;
    }
    bool operator< (const Data &d) const {
        if (val_abs == d.val_abs) {
            return val > d.val;
        }
        else {
            return val_abs > d.val_abs;
        }
    }
};
priority_queue<Data> pQ;
int n;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    // freopen("input.txt", "rt", stdin);

    cin >> n;
    for (int i = 1; i <= n; i++) {
        int a;
        cin >> a;
        if (a == 0) {
            if (pQ.empty()) {
                cout << 0 << '\n';
            }
            else {
                cout << pQ.top().val << '\n';
                pQ.pop();
            }
        }
        else {
            pQ.push(Data(a, abs(a)));
        }
    }
    return 0;
}
  • bool operator< (const Data &d) const : 절대값이 같다면, 그 중에서는 실제값이 작은 것을 힙의 root값으로 설정하는 오버로딩 부분이다.
profile
안녕하세요.

0개의 댓글