최소힙
최소힙은 완전이진트리로 구현된 자료구조입니다. 그 구성은 부모 노드값이 왼쪽자식과 오른
쪽 자식노드의 값보다 작게 트리를 구성하는 것입니다. 그렇게 하면 트리의 루트(root)노드는
입력된 값들 중 가장 작은 값이 저장되어 있습니다. 예를 들어 5 3 2 1 4 6 7순으로 입력되
면 최소힙 트리는 아래와 같이 구성됩니다.
1
2 3
5 4 6 7
최소힙 자료를 이용하여 다음과 같은 연산을 하는 프로그램을 작성하세요.
1) 자연수가 입력되면 최소힙에 입력한다.
2) 숫자 0 이 입력되면 최소힙에서 최솟값을 꺼내어 출력한다.
(출력할 자료가 없으면 -1를 출력한다.)
3) -1이 입력되면 프로그램 종료한다.
▣ 입력설명
첫 번째 줄부터 숫자가 입력된다. 입력되는 숫자는 100,000개 이하이며 각 숫자의 크기는 정
수형 범위에 있다.
▣ 출력설명
2) 연산을 한 결과를 보여준다.
▣ 입력예제 1
5
3
6
0
5
0
2
4
0
-1
▣ 출력예제 1
3
5
2
문제풀이
import sys
import heapq as hq
sys.stdin=open("input.txt", "r")
a=[]
while True:
n = int(input())
if n == -1:
break
if n == 0:
if len(a) ==0:
print(-1)
else:
print(hq.heappop(a))
else:
hq.heappush(a, n)
보충설명
최소힙은
위에서 아래로
좌측에서 우측으로 노드 값을 채워간다.
채워질 때마다 부모노드와 자식노드를 비교해서 최소힙을 완성한다.
최소 힙에서 pop을 하면
root노드가 pop된다.
그러면
말단 노드 중에서
가장 오른쪽에
있는 노드가 빈 root노드에 들어 간다.
그 이후에 DownHeap을 반복적으로 수행하면서
최소힙을 만든다.
'파이썬 알고리즘 > 스택, 큐, 해쉬, 힙' 카테고리의 다른 글
9.Anagram(아나그램) (0) | 2022.11.05 |
---|---|
8.단어 찾기(해쉬) (0) | 2022.11.05 |
7. 교육과정 설계 (0) | 2022.11.05 |
6. 응급실 (0) | 2022.11.05 |
5. 공주 구하기(큐) (0) | 2022.11.05 |