최대힙
최대힙은 완전이진트리로 구현된 자료구조입니다. 그 구성은 부모 노드값이 왼쪽자식과 오른쪽 자식노드의 값보다 크게 트리를 구성하는 것입니다. 그렇게 하면 트리의 루트(root)노드는 입력된 값들 중 가장 큰 값이 저장되어 있습니다. 예를 들어 5 3 2 1 4 6 7 순으로 입력되면 최대힙 트리는 아래와 같이 구성됩니다.
최대힙 자료를 이용하여 다음과 같은 연산을 하는 프로그램을 작성하세요.
1) 자연수가 입력되면 최대힙에 입력한다.
2) 숫자 0 이 입력되면 최대힙에서 최댓값을 꺼내어 출력한다. (출력할 자료가 없으면 -1를 출력한다.)
3) -1이 입력되면 프로그램 종료한다.
▣ 입력설명
첫 번째 줄부터 숫자가 입력된다. 입력되는 숫자는 100,000개 이하이며 각 숫자의 크기는 정수형 범위에 있다.
▣ 출력설명
2) 연산을 한 결과를 보여준다.
▣ 입력예제 1
5
3
6
0
5
0
2
4
0
-1
▣ 출력예제 1
6
5
5
풀이
heapq 는 기본적으로 최소힙으로 작동한다.
따라서 부호를 반대로만 넣어준 후 힙에 넣어주고, 출력할 때 다시 부호를 바꿔서 출력하면 된다.
코드
import heapq as hq
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) # a라는 리스트에 -n 값을 push 한다.
'⏰ 코딩테스트 > 자료구조 활용' 카테고리의 다른 글
최소힙 (0) | 2021.10.23 |
---|---|
아나그램(딕셔너리 해쉬) (0) | 2021.10.22 |
단어 찾기(해쉬) (0) | 2021.10.22 |
교육과정 설계(큐) (0) | 2021.10.21 |
응급실(큐) (0) | 2021.10.21 |