여러 값들 중 우선순위가 중요할 때 사용하는 자료구조로 완전 이진 트리 형태를 띔.
이진트리 종류
힙이 가장 많이 사용되는 자료 구조는 각원소가 튜플로 된 리스트나, 딕셔너리가 될 것 같다.
ex)
[(7:양치하기), (2:밥먹기), (9:간식먹기), (1:잠자기), (3: 공부하기), (13: 산책하기)
힙 구조에 하나씩 넣어 우선순위 순으로 행동하고자 한다.
최초로 Heap Push 시 가장 최상단에 누적.







이렇게 행동 우선순위로 정렬된 힙구조가 있다 치자
우리가 컴퓨되었다고 가정하고 하나씩 행동해보자







Queue는 FIFO(선입선출) 형식으로 먼저나오는 값이 먼저 나가는 구조이지만 우선순위 queue는 들어오는 순서에 상관 없이 우선순위가 높은 데이터가 먼저 나간다.
import heapq
import sys
heap=[0]
n = int(input())
for _ in range(n) :
input1 = int(sys.stdin.readline())
if input1 == 0:
if heap[0] != 0:
print(-heapq.heappop(heap))
else:
print(heap[0])
else:
heapq.heappush(heap,-input1)
heappush([배열],값)
heap에 value 삽입
(파이썬은 min heap만 지원)
value에 -를 붙여 음수로 저장하면 최대힙으로 구현 가능
heappop([배열])
heap최상단(부모노드) pop
(파이썬은 min heap만 지원)
pop()에 -를 붙여 음수로 가져오면 -(-x) 같인 부호가 변경되어 정수로 출력 가능.
(-heapq.heappop(heap)
역싀 간식은 양치하고 나서 먹어야죠 뭘좀아시네