
일반적인 큐는 먼저 들어온 순서대로 처리 (FIFO) 하지만,
우선순위 큐는 "우선순위가 높은 데이터"를 먼저 꺼내는 큐이다.
그냥 줄 서는 게 아니라, "급한 사람 먼저 처리" 하는 느낌이다.
예를 들어, 비상환자 → 일반환자 순서로 진료하는 병원처럼!
| 구분 | 일반 큐 (Queue) | 우선순위 큐 (Priority Queue) |
|---|---|---|
| 처리 순서 | 먼저 들어온 순서 (FIFO) | 우선순위가 높은 데이터 먼저 |
| 삽입 위치 | 항상 뒤쪽 | 뒤쪽 (우선순위 관계 없음) |
| 꺼내는 위치 | 항상 앞쪽 | 가장 높은 우선순위 위치 |
💡 이름이 우선순위 큐 라서 큐처럼 동작할 것 이라는 생각이 들 수 있으나,
실제로는 단순히 “우선순위 값”기준으로 데이터를 꺼내는 자료구조일 뿐이다.
enqueue(5)
enqueue(2)
enqueue(8)
enqueue(3)
import heapq
pq = []
# 데이터 삽입 (push)
heapq.heappush(pq, 5)
heapq.heappush(pq, 2)
heapq.heappush(pq, 8)
heapq.heappush(pq, 3)
# 데이터 꺼내기 (pop)
print(heapq.heappop(pq)) # 2 (기본은 '최소'가 먼저 나옴)
heapq.heappush(pq, -5) # -5는 실제로는 5 의미
heapq.heappush(pq, -2)
heapq.heappush(pq, -8)
heapq.heappush(pq, -3)
print(-heapq.heappop(pq)) # 8 출력
| 연산 | 시간 복잡도 |
|---|---|
| 삽입(push) | O(log N) |
| 삭제(pop) | O(log N) |
| 개념 | 설명 |
|---|---|
| 우선순위 큐 | "우선순위가 높은 데이터"를 먼저 꺼냄 |
| 파이썬 heapq | "최소 힙" 구조 (작은 값 먼저 pop) |
| O(log N) | 삽입, 삭제 모두 효율적 |
| 최대 힙 변환 | push할 때 부호를 반대로 넣어줌 |