‡ CODING TEST STUDY ‡/º 백준

[백준 1927번 C++] 최소힙

Trudy | 송연 2023. 9. 16. 18:17

1927번: 최소 힙 (acmicpc.net)

 

1927번: 최소 힙

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

www.acmicpc.net


그렇다.. prioriy_queue를 사용하면 최대 힙이 기본적으로 작동하는 자료구조를 이용할 수 있다

 

[C++] <queue> 라이브러리, 우선순위 큐, 최대 힙, 최소 힙 :: Feel Coding (tistory.com)

 

[C++] <queue> 라이브러리, 우선순위 큐, 최대 힙, 최소 힙

C++에서 우선순위 큐를 구현하려면 라이브러리를 사용하면 된다. 따라서 #include 코드를 써줘야 한다. priority_queue - C++ Reference container_typeThe second template parameter (Container)Type of the underlying container www.

breakcoding.tistory.com

 

다만 여기서 기본 값이 최대 힙이니까, 방향을 오름차순으로 바꿔주면 최소힙을 구현할 수 있음

값이 작을 수록 우선순위가 높은 우선순위 큐 

를 만드는 것

priority_queue<int, vector<int>, greater<int>> q;

여기서 less가 오름차순으로 방향을 바꿔주는 것!


사실 시간초과 났었는데

입출력 시간을 줄여주는 제일 첫 두 줄을 추가해주니까 해결됐다

이제는 잊지말고 이거 계속 써야지 .. 

#include <iostream>
#include <queue>
using namespace std;

int main()
{
    cin.tie(NULL);
    cin.sync_with_stdio(false);
    
    int n, m;
    cin >> n;
    
    priority_queue<int, vector<int>, greater<int>> pq;
    for(int i=0; i<n; i++){
        cin >> m;
        
        if(m == 0){
            if(pq.empty()) cout << 0 <<"\n";
            else {
                cout <<pq.top() <<"\n";
                pq.pop();
            }
        }
        else {
            pq.push(m);
        }
    }
    return 0;
}