좋아! heapq의 heappush, heappop이 뭐고, 이게 우선순위 큐(Priority Queue)에서 어떤 역할을 하는지, 그리고 이게 스택(stack)이나 큐(queue) 같은 거랑 무슨 차이가 있는지 깔끔하게 설명
heapq.heappush() 와 heapq.heappop()이란?heapq는 파이썬 기본 라이브러리로, 최소 힙(min-heap) 기반 우선순위 큐를 구현할 수 있음.
heappush(heap, item)heappop(heap)import heapq
heap = []
heapq.heappush(heap, 5)
heapq.heappush(heap, 3)
heapq.heappush(heap, 7)
print(heapq.heappop(heap)) # 3 (가장 작은 값)
print(heapq.heappop(heap)) # 5
| 자료구조 | 삽입(push) 순서 | 꺼낼 때(pop) 나오는 순서 |
|---|---|---|
| Stack (스택) | 차곡차곡 쌓임 | 마지막에 넣은 게 먼저 나옴 (LIFO) |
| Queue (큐) | 줄 서듯 들어감 | 먼저 넣은 게 먼저 나옴 (FIFO) |
| Priority Queue (우선순위 큐) | 아무 순서로 넣어도 됨 | 우선순위 가장 높은 것(작은 수 등) 이 먼저 나옴 |
import heapq
from collections import deque
# Stack (LIFO)
stack = []
stack.append(10)
stack.append(5)
stack.append(20)
print("Stack pop:", stack.pop()) # 20
# Queue (FIFO)
queue = deque()
queue.append(10)
queue.append(5)
queue.append(20)
print("Queue pop:", queue.popleft()) # 10
# Priority Queue (우선순위 큐 - 최소 힙)
heap = []
heapq.heappush(heap, 10)
heapq.heappush(heap, 5)
heapq.heappush(heap, 20)
print("Heap pop:", heapq.heappop(heap)) # 5 (가장 작은 값)
stack.pop() → 마지막에 넣은 거 나옴queue.popleft() → 처음 넣은 거 나옴heapq.heappop() → 가장 작은 값 나옴 (우선순위 높은 거 나옴)