[C++]백준11286번 절댓값 힙
문제는 다음과 같다.
오늘은 백준11286번 절댓값 힙 문제를 풀어보도록 하자. 우선순위 큐를 이용해서 푸는 문제이다. 만일 절댓값의 크기가 같다면 작은 순으로 정렬을 해야한다. 따라서 사용자함수를 따로 정의해줘야 한다.
cmp 구조체를 만들어 준 후, 연산자 오버로딩을 통해 부모노드의 값과 비교 후 정렬해주었다. 그 후 만일 0의 값이 들어왔는데 비어있다면 0을 출력, 아니면 가장 앞 쪽의 값을 출력하면 된다.
[코드]
#include <iostream>
#include <queue>
using namespace std;
struct cmp {
bool operator()(int a, int b) {
if (abs(a) > abs(b)) return true;
else if (abs(a) == abs(b)) {
if (a > b)return true;
else return false;
}
else return false;
}
};
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
priority_queue<int, vector<int>, cmp>pq;
int N, num;
cin >> N;
while (N--) {
cin >> num;
if (num != 0)pq.push(num);
else {
if (pq.empty())cout << 0 << '\n';
else {
cout << pq.top() << '\n';
pq.pop();
}
}
}
}