[BaekJoon] 백준 11286번 : 절댓값 힙

Updated:

11286번 : 절댓값 힙

ABS HEAP


주어진 값 중 양수만 저장하는 최소 힙, 음수만 저장하는 최대 힙 두 개를 가지고 문제를 해결 할 수 있다.

음수를 저장하는 최대 힙은 어차피 -1을 곱해 저장하기 때문에 절댓값 형식으로 저장이 된다.

때문에 각 힙의 top 중 작은 값을 먼저 출력하고 top 이 같다면 음수를 먼저 출력하면 된다.

또 힙이 비어있는 경우 0 을 출력한다고 했으니 그건 따로 처리하면 된다.


import heapq
import sys

positive_heap = []
negative_heap = []
for _ in range(int(input())):
	data = int(sys.stdin.readline().rsplit()[0])

	if data > 0:
		heapq.heappush(positive_heap, data)
	elif data < 0:
		heapq.heappush(negative_heap, -data)
	else:
		if positive_heap and negative_heap:
			if positive_heap[0] < negative_heap[0]:
				print(heapq.heappop(positive_heap))
			else:
				print(-heapq.heappop(negative_heap))
		else:
			if positive_heap:
				print(heapq.heappop(positive_heap))
			elif negative_heap:
				print(-heapq.heappop(negative_heap))
			else:
				print(0)



Categories:

Updated:

Leave a comment