파이썬의 heapq
는 **최소 힙(min-heap)**을 기본으로 제공하며, 이를 통해 최솟값을 빠르게 조회하고 삭제하는 것이 가능합니다. 각 연산의 시간 복잡도와 함께 주요 연산에 대해 설명드리겠습니다. 최대 힙을 구현하기 위해서는 입력값과 출력값에 -1을 곱하여 문제를 해결할 수 있다.
본 페이지는 자료구조 우선순위 큐에 대해 다루는 페이지 입니다. 자료구조 우선순위 큐에 대한 내용은 아래 페이지를 참고 하길 바랍니다.
heapq.heappush(heap, item)
, 삽입 연산
item
을 추가합니다. 이때 힙 구조가 유지되도록 삽입합니다.N
은 힙의 요소 수)import heapq
heap = []
heapq.heappush(heap, 10)
heapq.heappush(heap, 1)
heapq.heappush(heap, 5)
print(heap) # [1, 10, 5]
heapq.heappop(heap)
, 제거 연산
smallest = heapq.heappop(heap)
print(smallest) # 1
print(heap) # [5, 10]
heapq.heappushpop(heap, item)
, 삽입후 제거 연산
item
을 삽입한 뒤, 가장 작은 요소를 제거하고 반환합니다. 이 연산은 heappush
와 heappop
을 연속으로 호출하는 것보다 더 효율적입니다. ⇒ 다른 함수 2개를 사용하는 것보다 해당 함수 1개를 사용하는 것이 효율적smallest = heapq.heappushpop(heap, 2)
print(smallest) # 1
print(heap) # [2, 3, 4, 9, 5]
heapq.heapreplace(heap, item)
, 제거후 삽입 연산
item
을 삽입합니다. 이 연산도 heappop
과 heappush
를 연속으로 호출하는 것보다 더 효율적입니다.