최소 힙
문제: 최소 힙 (백준 1927번)
구조 분석
최대 힙 문제와 마찬가지로 stl의 priority queue를 이용하여 힙을 구현하는 문제이다.
풀이 방법
최대 힙: 내림차순 정렬
최소 힙: 오름차순 정렬
Priority queue
에는 오름차순과 내림차순같은 정렬 기능이 있다.
priority_queue<자료형, 구현체, 비교연산자>
이를 이용하여 구현하면 아래와 같다.
// max heap
priority_queue<int> pq;
priority_queue<int,vector<int>,less<int>> pq;
// min heap
prirority_queue<int,vector<int>.greater<int>> pq;
코드
#include <stdio.h>
#include <iostream>
#include <queue>
using namespace std;
int n;
priority_queue<int, vector<int>, greater<int>> pq;
int main() {
cin.tie(NULL);
cout.tie(NULL);
cin >> n;
int x;
for (int i=0; i<n; i++) {
cin >> x;
if (x == 0) {
if (pq.empty()) {
cout << 0 << "\n";
}
else {
cout << pq.top() << "\n";
pq.pop();
}
}
else {
pq.push(x);
}
}
return 0;
}
정리
priorty queue는 정렬을 통해 최대 힙, 최소 힙을 모두 구현할 수 있다. 문제의 조건에 따라 잘 이용하면 좋을 것 같다.
댓글남기기