최대힙과 최소힙을 만들고 두 힙을 동기화시켰다.
이렇게 하는 이유는 최댓값이나 최솟값을 pop할때 힙을 통해 pop을 하게되면 빠르게 처리할 수 있기 때문이다.
두개의 힙을 만들었지만, 파이썬 heapq 공식문서를 참고해보니 아래와 같은 기능이 있었다.
import heapq
def solution(operations):
answer = []
max_heap = []
min_heap = []
for operation in operations:
op = operation.split(' ')
if op[0] == 'I':
heapq.heappush(max_heap,-int(op[1]))
heapq.heappush(min_heap,int(op[1]))
else:
if op[1] == '1':
if len(max_heap) == 0:
continue
x = heapq.heappop(max_heap)
min_heap.remove(-x)
else:
if len(max_heap) == 0:
continue
x = heapq.heappop(min_heap)
max_heap.remove(-x)
if len(max_heap) == 0:
return [0,0]
elif len(max_heap) == 1:
a = heapq.heappop(max_heap)
return [a,a]
else:
a = heapq.heappop(max_heap)
b = heapq.heappop(min_heap)
return [-a,b]