문제
최대힙은 완전이진트리로 구현된 자료구조입니다. 그 구성은 부모 노드값이 왼쪽자식과 오른 쪽 자식노드의 값보다 크게 트리를 구성하는 것입니다. 그렇게 하면 트리의 루트(root)노드는 입력된 값들 중 가장 큰 값이 저장되어 있습니다.
예를 들어 5 3 2 1 4 6 7순으로 입력되면 최대힙 트리는 아래와 같이 구성됩니다.
최대힙 자료를 이용하여 다음과 같은 연산을 하는 프로그램을 작성하세요.
1) 자연수가 입력되면 최대힙에 입력한다.
2) 숫자 0 이 입력되면 최대힙에서 최댓값을 꺼내어 출력한다. (출력할 자료가 없으면 -1를 출력한다.)
3) -1이 입력되면 프로그램 종료한다.
입력설명
첫 번째 줄부터 숫자가 입력된다. 입력되는 숫자는 100,000개 이하이며 각 숫자의 크기는 정 수형 범위에 있다.
출력설명
2) 연산을 한 결과를 보여준다.
입력예제
5
3
6
0
5
0
2
4
0
-1
출력예제
6
5
5
#include <stdio.h>
#include <queue>
using namespace std;
int main(){
//freopen("input.txt", "rt", stdin);
int num;
priority_queue<int> pQ;
while(true){
scanf("%d", &num);
if(num == -1){
break;
}
if(num == 0){
if(pQ.empty()){
printf("-1\n");
} else {
printf("%d\n", pQ.top());
pQ.pop();
}
} else {
pQ.push(num);
}
}
return 0;
}
숫자가 입력될때마다 이진트리를 구성하고 부모노드와 비교해서 부모가 작다면 위치를 바꾸는 트리
'알고리즘 > it 취업을 위한 알고리즘 문제풀이' 카테고리의 다른 글
75. 최대 수입 스케쥴(priority_queue) (0) | 2021.06.08 |
---|---|
74. 최소 힙(priority_queue) (0) | 2021.06.07 |
72. 공주 구하기(큐) (0) | 2021.06.07 |
71. 송아지 찾기(BFS : 상태트리탐색) (0) | 2021.06.05 |
70. 그래프 최단거리(BFS) (0) | 2021.06.04 |