절댓값 힙은 다음과 같은 연산을 지원하는 자료구조이다.
배열에 정수 x (x ≠ 0)를 넣는다.
배열에서 절댓값이 가장 작은 값을 출력하고, 그 값을 배열에서 제거한다. 절댓값이 가장 작은 값이 여러개일 때는, 가장 작은 수를 출력하고, 그 값을 배열에서 제거한다.
프로그램은 처음에 비어있는 배열에서 시작하게 된다.
인풋의 절댓값의 순서대로 힙에 저장하고 출력하자
파이썬의 heapq에 튜플형식으로 저장하고 출력하면 된다.
import heapq
import sys
if __name__ == '__main__':
heap = []
N = int(input())
for _ in range(N):
num = int(sys.stdin.readline().rstrip())
if num:
heapq.heappush(heap, (abs(num), num))
else:
if heap:
print(heapq.heappop(heap)[1])
else:
print(0)
파이썬의 heaqp에 약간의 트릭을 쓰면 풀 수 있는 문제이다.