priority_queue
에 비교 연산자를 직접 구현하여 해결했다.
struct 함수명 {
bool operator()(자료형 a, 자료형 b) {
return 정렬 조건
}
}
이 형태가 손에 잘 안익어서 외워야쓰긴 하겄는데
일단은 오늘 해본걸로 만족
return
조건도 구현할 때마다 헷갈린다.
암기하기 좋진 않지만 오늘 풀 때 생각해 둔 것은
b
가 앞에 오는 걸로 생각하면 될 것 같다.
예를 들어 내림차순이라면 앞에 있는 b가 더 큰 수이므로 return a < b
거꾸로 오름차순이면 앞쪽 b보다 a가 클테니 return a > b
와 같은 식이다.
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
struct cmp {
bool operator()(int a, int b) {
if (abs(a) == abs(b)) return a > b;
else return abs(a) > abs(b);
}
};
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int n, num;
cin >> n;
priority_queue<int, vector<int>, cmp> pq;
for (int i = 0; i < n; i++) {
cin >> num;
if (num == 0) {
if (pq.empty()) cout << "0\n";
else {
cout << pq.top() << "\n";
pq.pop();
}
}
else {
pq.push(num);
}
}
return 0;
}