백준 문제를 풀다가 heap를 사용하는 문제가 있어 heap에 대해 정리하고자 한다.
우선순위 큐를 구현하기 위해 사용되는 자료구조 중 하나로, 특정 순서를 유지하는 완전 이진 트리다.
우선순위의 개념을 큐에 도입한 자료구조

부모 노드의 키 값이 자식 노트의 키 값보다 크거나 같은 완전 이진 트리
부모 노드의 키 값이 자식 노드의 키 값 보다 작거나 같은 완전 이진 트리
import heapq
heapq 모듈을 import 하여 heap를 쉽게 사용할 수 있다.
heapq 모듈은 min heap를 사용한다
heap = []
list와 같이 생성해 주면 된다.
heapq.heappush(heap, 10)
heaqp.heappush 키워드를 사용하고 인자로
heaqp.heappush(푸시할 힙, 값)
arr = [10,20,30]
heapq.heapify(arr)
이미 생성된 리스트가 있을 경우
heapq.heapify(리스트명) 을 통해 리스트 자료형을 힙 자료형으로 바꿀수 있다.
a = heapq.heappop(heap)
heappop 함수는 가장 작은 원소를 힙에서 제거함과 동시에 그를 결과값으로 리턴한다
heap도 list와 동일하게 인덱스 접근이 가능하다.