본문 바로가기
문제 풀이/백준(BOJ)

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

by 희조당 2022. 1. 18.
728x90

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

 

11286번: 절댓값 힙

첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0

www.acmicpc.net


 문제 풀이

우선순위 큐의 힙 구조를 이용해서 빠르게 정렬을 하는 것이 포인트이다!

절댓값과 일반 값 모두 따져야 해서 pair 구조를 이용했고 내부적으로 정리하기 위해서 구조체를 구현했다!

 느낀 점

그렇게 어렵지 않은 문제인데 오랜만에 코딩을 하다 보니까 많이 버벅거렸다. 꾸준히 계속 연습해야겠다.

 코드

#include <iostream>
#include <queue>
#include <math.h>

using namespace std;

struct cmp {
	bool operator()(pair<int, int> a, pair<int, int> b) {
		if (a.second < b.second)
			return false;
		else if (a.second == b.second)
			return a.first > b.first;
		else
			return true;
	}
};

int n;
priority_queue<pair<int,int>, vector<pair<int,int>>, cmp> pq; // <기본, 절대값>

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);

	cin >> n;
	
	while (n--) {
		int tmp;
		cin >> tmp;
		
		if (tmp == 0) {
			if (pq.empty())
				cout << 0 << "\n";
			else {
				cout << pq.top().first << "\n";
				pq.pop();
			}
		}
		else {
			pq.push(make_pair(tmp, abs(tmp)));
		}
	}
}

'문제 풀이 > 백준(BOJ)' 카테고리의 다른 글

[Python] 백준 1026번 : 보물  (0) 2022.06.18
[C++] 백준 4358번 : 생태학  (0) 2022.01.20
[C++] 백준 1080번 : 행렬  (0) 2022.01.17
[C++] 백준 11279번 : 최대 힙  (0) 2021.11.12
[C++] 백준 14425번 : 문자열 집합  (0) 2021.11.06

댓글