컴퓨터/python
[python] heapq
뽀또롱
2023. 4. 17. 17:38
파이썬의 heapq 모듈은 우선순위 큐 알고리즘의 구현을 제공한다.
따라서 heapq를 사용하여 최소힙과 최대힙을 구현할 수 있다.
heappush(heap, item)
힙의 조건을 유지하며 item을 heap으로 push한다.
heappop(heap)
힙의 조건을 유지하며 heap에서 가장 작은 item을 pop하고 반환한다.
heap이 비어있다면 IndexError가 발생한다.
최소 힙
heapq는 기본적으로 최소 힙을 구현한다.
백준에 최소 힙을 구현하는 문제가 있어 적용하여 보았다.
1927번: 최소 힙
첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0
www.acmicpc.net
import heapq
import sys
input = sys.stdin.readline
lst =[]
for _ in range(int(input())):
x = int(input())
if x >0:
heapq.heappush(lst,x)
else:
if len(lst) == 0:
print(0)
else:
print(heapq.heappop(lst))
최대 힙
heapq는 기본적으로 최소 힙을 구현하므로 최대 힙을 구하기 위해서는 약간의 트릭을 사용하면 된다.
마찬가지로 백준에 최대 힙을 구현하는 문제가 있어 적용하여 보았다.
11279번: 최대 힙
첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0
www.acmicpc.net
import heapq
import sys
input = sys.stdin.readline
lst=[]
for _ in range(int(input())):
x = int(input())
if x != 0:
heapq.heappush(lst, -x)
else:
if len(lst) == 0:
print(0)
else:
y = heapq.heappop(lst)
print(-y)
저장하는 값과 pop한 값에 -를 붙여줌으로써 최대 힙을 구현한다.
728x90