우선순위가 가장 높은 데이터를 가장 먼저 삭제하는 자료구조, 데이터를 우선순위에 따라 처리하고 싶을 때 사용합니다.
예시 ) 물건 데이터를 자료구조에 넣었다가 가치가 높은 물건부터 꺼내서 확인해야 하는 경우
데이터의 개수가 N개일 때, 구현 방식에 따른 시간 복잡도
단순히 N개의 데이터를 힙에 넣었다가 모두 꺼내는 작업은 정렬과 동일합니다. (힙 정렬)
-> 이 경우의 시간 복잡도는 O(NlogN)
힙은 완전 이진 트리 자료구조의 일종
- 완전 이진트리란?
루트 노트부터 시작해서 왼쪽 자식 노드, 오른쪽 자식 노드 순서대로 데이터가 차례대로 삽입되는 트리
힙에서는 항상 루트 노드를 제거
최소 힙 (min heap)
- 루트 노드가 가장 작은 값
최대 힙 (max heap)
- 루트 노드가 가장 큰 값
# -*- coding: utf-8 -*-
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])
참고 : https://www.youtube.com/watch?v=AjFlp951nz0&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC&index=11