프로그래밍언어/파이썬[중급]
[파이썬][중급] Chapter16. heapq와 우선순위 큐
about_IT
2025. 5. 23. 23:18
728x90
우선순위 큐(Priority Queue)는 가장 높은(또는 낮은) 우선순위를 가진 요소를 빠르게 꺼낼 수 있는 자료 구조입니다. 파이썬에서는 heapq
모듈을 통해 최소 힙(min-heap) 기반의 우선순위 큐를 효율적으로 구현할 수 있습니다.
● heapq란?
heapq
는 힙(heap) 알고리즘을 기반으로 하는 우선순위 큐 모듈입니다. 리스트를 힙으로 다룰 수 있도록 해주며, 시간 복잡도 O(log n)으로 요소를 삽입하거나 꺼낼 수 있습니다.
import heapq
heap = []
heapq.heappush(heap, 3)
heapq.heappush(heap, 1)
heapq.heappush(heap, 5)
print(heapq.heappop(heap)) # 1
위 코드에서 가장 작은 값인 1이 먼저 추출됩니다. heap
은 자동으로 힙 속성을 유지합니다.
● 리스트를 힙으로 변환
기존 리스트를 힙 구조로 변환하려면 heapify()
를 사용합니다.
nums = [4, 2, 7, 1]
heapq.heapify(nums)
print(heapq.heappop(nums)) # 1
heapify는 in-place로 작동하므로 별도의 리스트 생성 없이 정렬 구조를 유지할 수 있습니다.
● 최대 힙 구현
heapq는 기본적으로 최소 힙만 지원하므로, 최대 힙은 음수 값을 활용하여 구현합니다.
max_heap = []
heapq.heappush(max_heap, -10)
heapq.heappush(max_heap, -1)
print(-heapq.heappop(max_heap)) # 10
● 튜플을 이용한 우선순위 설정
튜플의 첫 번째 요소를 기준으로 자동 정렬되므로, 우선순위 큐를 구현할 때 자주 사용됩니다.
tasks = []
heapq.heappush(tasks, (2, "코딩"))
heapq.heappush(tasks, (1, "과제"))
print(heapq.heappop(tasks)) # (1, '과제')
● 마무리
heapq
는 빠르고 간결하게 우선순위 큐를 구현할 수 있는 훌륭한 도구입니다. 알고리즘 문제 풀이, 작업 스케줄링, 이벤트 처리 등에서 매우 유용하므로 꼭 숙지해두시기 바랍니다.
728x90