Koala - 12기/코딩테스트 준비 스터디

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

Langerak 2023. 10. 29. 01:27

문제

해설

절대값 힙이라는 자료구조를 우선순위 큐로 만들어 구현했습니다.

c++의 우선순위 큐는 가장 큰 값이 출력이 되는데, 절댓값이 가장 작은 값을 출력해야기에 -를 붙혀 push하였습니다.

그리고 연산자 오버로딩으로 절댓값이 같을 때 더 작은 수를 출력하도록 했습니다.

코드

#include <bits/stdc++.h>
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_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);

	priority_queue<int, vector<int>, cmp> pq;

	int N;
	cin >> N;

	for (int i = 0; i < N; i++) {
		int x; cin >> x;

		if (x != 0) {
			pq.push(-x);
		}
		else {
			if (pq.empty()) cout << 0 << '\n';
			else {
				cout << -pq.top() << '\n';
				pq.pop();
			}
		}
	}

	return 0;
}