본문 바로가기

Algorithm/Implementation

(C++) - 백준(BOJ) 1927번 : 최소 힙 답

반응형

www.acmicpc.net/problem/1927

 

1927번: 최소 힙

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

www.acmicpc.net

힙(heap)자료구조를 사용하는 우선순위 큐(priority queue)를 사용하는 문제였습니다.

 

풀이방법

 default가 less(내림차순 정렬, top은 현재 heap 중 가장 큰 값 즉 max heap) 이므로 greater옵션을 주어 min heap으로 바꾸어준 뒤 조건에 맞게 출력해주면 됩니다.

 

Code

#include <iostream>
#include <queue>
#define fastio ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0)
using namespace std;
int main() {
    fastio;
	priority_queue<int, vector<int>, greater<int>> q;//가장 작은 값을 front에 넣기 위해 우선 순위 큐 선언
	int n;
	cin >> n;
	while (n--){
		int x;
		cin >> x;
		if (x == 0){
			if (q.empty()) cout << 0 << '\n';
			else { cout << q.top() << '\n'; q.pop(); }
		}
		else q.push(x);
	}
}