최소 힙: 부모 노드의 키값이 자식 노드의 키값보다 항상 작은 힙
최대 힙: 부모 노드의 키값이 자식 노드의 키값보다 항상 큰 힙

힙에서는 가잔 낮은 (혹은 높은) 우선순위를 가지느 노드가 항상 루트에 오게 되고, 이를 이용하여 우선순위 큐와 같은 추산적 자료형 구현 가능
이때 키값의 대소 관계는 부모/자식 간에만 성립하고, 형제노드 사이에는 대소 관계가 정해지지 않음
import heapq
heap = []
heapq.heappush(heap, 50)
heapq.heappush(heap, 10)
heapq.heappush(heap, 20)
print(heap) # [10, 50, 20]
result = heapq.heappop(heap)
print(result) # 10
print(heap) # [20,50]
최대 힙 만들기
heap_items = [1,3,5,7,9]
max_heap = []
for item in heap_items:
heapq.heappush(max_heap, (-item, item))
print(max_heap) [(-9,9), (-7,7), (-3,3), (-1,1), (-5,5)]
문제
입력
출력
# 다솜이가 매수해야 하는 사람의 최솟값
import sys
input = sys.stdin.readline
import heapq
N = int(input()) # 후보 수
dasom = int(input())
vote = []
count = 0
for _ in range(N-1):
n = int(input())
heapq.heappush(vote, -n)
res = 0
while vote:
n = -heapq.heappop(vote)
if dasom > n:
break
dasom += 1
res += 1
heapq.heappush(vote, -(n-1))
print(vote)
print(res)