알고리즘

74. 최소힙 [우선순위 큐 이용]

홍루피 2021. 2. 3. 20:53

인프런 - it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비 강의를 바탕으로 공부한 내용입니다.

문제는 비공개로 입력예제와 출력예제만을 가지고 포스팅

 

 

입력예제 1

5

3

6

0

5

0

2

4

0

-1

 

출력예제 1

3

5

2

 

풀이 

- PriorityQueue는 기본적으로 최대힙 구조를 지원

=> 최소힙으로 만들려면 어떤 방식을 사용해야하는지가 중요함

- 6>5이지만 -를 붙이면 -6<-5가 된다.

=> 이를 이용해 큐에 넣을때 -로 푸쉬하고 출력할때 -를 붙여서 출력하면 원래값을 얻을 수 있다.

 

#include <stdio.h>
#include <vector>
#include <queue>
using namespace std;

//74. 최소힙 (우선순위 큐)
//부모노드의 값이 왼쪽 자식과 오른쪽 자식보다 작아야함 => 가장작은 값이 루트에 들어감
// -5는 -6보다 큼 => 최대힙 구조로 -5가 루트, -6이 자식이 됨 => 최소힙 구현 시 -를 +로 바꿔서 출력
int main(){
    int a;
    priority_queue<int> pQ;

    while(true){
        scanf("%d", &a);
        if(a==-1) break;
        if(a==0) {
            if(pQ.empty()) printf("-1\n");
            else{
                printf("%d\n", -pQ.top());
                pQ.pop();
            }
        }
        else pQ.push(-a);
    }

    return 0;
}