본 포스팅은 (이코테 2021) 이것이 취업을 위한 코딩 테스트다 with 파이썬을 참고하여 공부하고 정리한 글임을 밝힙니다.
우선순위 큐: 우선순위가 가장 높은 데이터를 가장 먼저 삭제하는 자료구조
데이터를 우선순위에 따라 처리하고 싶을 때 사용
자료구조 | 추출되는 데이터 |
---|---|
스택(Stack) | 가장 나중에 삽입된 데이터 (선입후출) |
큐(Queue) | 가장 먼저 삽입된 데이터 (선입선출) |
우선순위 큐(Priority Queue) | 가장 우선순위가 높은 데이터 |
우선순위 큐 구현 방법
(1) 단순히 리스트를 이용하여 구현
(2) 힙(heap)을 이용하여 구현
데이터 개수가 N개 일 때, 구현 방식에 따라서 시간 복잡도를 비교한 내용
우선순위 큐 구현 방식 | 삽입 시간 | 삭제 시간 |
---|---|---|
리스트 | ||
힙(heap) |
단순히 N개의 데이터를 힙에 넣었다가 모두 꺼내는 작업은 정렬과 동일 (힙 정렬)
완전 이진 트리 자료구조의 일종
항상 루트 노드(root node)를 제거한다
최소 힙(min heap)
최대 힙(max heap)
루트 노드가 가장 큰 값을 가진다
따라서 값이 큰 데이터가 우선적으로 제거된다
의 시간 복잡도로 힙 성질을 유지하도록 할 수 있다
import sys
import heapq
input = sys.stdin.readline
def heapsort(iterable):
h = []
result = []
# 모든 원소 차례대로 힙에 삽입
for value in iterable:
heapq.heappush(h, value)
# 힙에 삽입된 모든 원소 차례대로 꺼내어 담기
for i in range(len(h)):
result.append(heapq.heappop(h))
return result
n = int(input())
arr = []
for i in range(n):
arr.append(int(input()))
res = heapsort(arr)
for i in range(n):
print(res[i])