파이썬의 heapq는 최소힙으로 구성되어있다
하나의 큐에 최소/최대 우선순위를 같이 할 수 없으니 최소힙, 최대힙을 각각 만들어 준 후 값을 삭제할 때마다 다른 힙에서도 값을 삭제해준다.
최대힙을 만드는 방법은 최소힙에 넣는 num값에 -를 붙여서 넣어주고, 최소힙에서 값을 삭제할 때도 -를 붙인 값을 삭제해주면 된다.
return 값은 [최대값, 최소값]을 출력하면 되므로 최대힙과 최소힙에서 pop되는 첫 번째 값들을 넣어주는데, 최대값은 -를 떼고 넣어준다.
import heapq
def solution(operations):
answer = []
minheap = []
maxheap = []
for operation in operations:
opt, num = operation.split()
if opt=="I":
heapq.heappush(minheap, int(num))
heapq.heappush(maxheap, -int(num))
else:
try:
#최솟값 삭제
if int(num)==-1:
minvalue = heapq.heappop(minheap)
maxheap.remove(-minvalue)
#최댓값 삭제
elif int(num)==1:
maxvalue = heapq.heappop(maxheap)
minheap.remove(-maxvalue)
except:
continue
if len(maxheap)!=0:
answer.append(-heapq.heappop(maxheap))
else:
answer.append(0)
if len(minheap)!=0:
answer.append(heapq.heappop(minheap))
else:
answer.append(0)
return answer