[C++]백준11286번 절댓값 힙

less than 1 minute read

문제는 다음과 같다.

오늘은 백준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();
			}
		}
	}
}