최대 1 분 소요

문제: 최소 힙 (백준 1927번)

image

구조 분석

최대 힙 문제와 마찬가지로 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는 정렬을 통해 최대 힙, 최소 힙을 모두 구현할 수 있다. 문제의 조건에 따라 잘 이용하면 좋을 것 같다.

댓글남기기