문제링크: 백준 11279번(최대 힙)
이 문제는 x가 0이고, 배열이 비어있으면 0출력, 배열이 비어있지 않으면 가장 큰 수 출력,
x가 0이 아닌 자연수면 배열에 x를 추가하는 문제다.
import sys, heapq
input = sys.stdin.readline
hq = []
n = int(input())
for _ in range(n):
x = int(input())
if x != 0:
heapq.heappush(hq, (-x, x))
else:
print(heapq.heappop(hq)[1] if hq else 0)
이 문제는 파이썬의 heapq 모듈을 사용해서 우선순위 큐를 생성했다.
heapq의 heappush 메서드는 배열에 값이나 튜플을 넣을 수 있는데 값의 경우 heapq.heappush(hq, 1)과 같이 사용할 수 있다.
튜플의 경우 heappush(hq, (a, b))과 같이 사용할 수 있고, a는 우선순위, b는 값이 된다.
heapq는 배열에 원소가 들어오면 이를 내부적으로 오름차순으로 정렬해준다.
이 문제는 큰 수부터 출력해야 하기 때문에 튜플을 넣어주었고, heapq는 우선순위가 작은 원소부터 정렬하기 때문에 (-x, x) 와 같이 x가 클수록 우선순위가 앞에 작아져 앞에 오기 때문에 이러한 형태의 튜플을 heappush 하면 큰 수부터 출력할 수 있다.
heapq에서 값을 출력할 때는 heappop(hq)을 통해 배열의 가장 앞에 있는 값을 출력 및 제거할 수 있다.
배열에 튜플을 푸시했기 때문에 값에 해당하는 것을 출력하기 위해 heapq.heappop(hq)[1] 과 같이 작성했다.