반응형
https://www.acmicpc.net/problem/11286
import heapq
import sys
ssr = sys.stdin.readline
n = int(ssr())
h=[]
for _ in range(n):
o = int(ssr())
if o == 0:
if len(h) != 0:
print(heapq.heappop(h)[1])
else:
print(0)
else:
heapq.heappush(h, (abs(o), o))
지난 번에 최대 힙을 풀 때는 모조리 다 -를 씌워서 저장한 다음 출력할 때 다시 -를 붙여서 나오는 방식으로 구현을 했었는데요. 그 이후에 찾아보니 heapq의 heappush는 저장할 때 맨 앞의 원소를 기준으로 정렬하기 때문에 튜플로 묶은 다음 정리를 위한 값을, 앞에 뒤에는 원래 값을 배치해서 저장하고 나중에 heappop을 할 때 뒤 원소를 출력하도록만 해주면 문제없다는 사실을 알았습니다. 자료양이 엄청나게 많아진다면 메모리 관점에서 비효율적일 수는 있겠으나 이런 문제를 푸는데는 좋은 풀이가 아닐까 생각이 드네요.
반응형
'Problem Solving > BOJ' 카테고리의 다른 글
[BOJ][Python]11403번 풀이 (0) | 2022.07.08 |
---|---|
[BOJ][Python]2578번 풀이 (0) | 2022.07.07 |
[BOJ][Python]6064번 풀이 (0) | 2022.07.06 |
[BOJ][Python]5525번 풀이 (0) | 2022.07.05 |