문제 자체는 어렵지가 않은데 heap문제를 접해보지 않아서 heapq의 사용법을 몰라서 이 부분을 구글링을 통해 공부하여 문제를 해결해주었다.
여기서 heap에 대해 정리를 해보자면
일단
import heapq
를 통해서 import를 먼저 진행해준다.
기본적인 heap 사용법은 이렇다.
heapq.heappush(heap, item) : item을 heap에 추가
heapq.heappop(heap) : heap에서 가장 작은 원소를 pop & 리턴. 비어 있는 경우 IndexError가 호출됨.
heapq.heapify(x) : 리스트 x를 즉각적으로 heap으로 변환함 (in linear time, O(N) )
이때 heapq 모듈은 최소힙으로 구성되어있기 때문에 최대힙을 구성하기 위해서는 살짝의 변형이 필요하다
heapq.heappush(max_heap, (-item, item))
이렇게 진행해주면 최대힙을 만들 수 있다.
이렇게 heapq에 대해서 숙지한 후 이를 이용해 문제를 해결해 주었다.
import heapq
def solution(operations):
answer = [0,0]
hq = []
def i(x):
heapq.heappush(hq,x)
def d():
del hq[-1]
def d_1():
del hq[0]
for o in operations:
tmp = o.split()
if tmp[0] == 'I':
i(int(tmp[1]))
elif tmp[0] == 'D':
if len(hq)!= 0 :
if tmp[1] == '-1':
d_1()
else:
d()
else:
continue
if len(hq)>0:
answer[0] = max(hq)
answer[1] = min(hq)
return answer
이때 처음에는
if len(hq) > 0:
answer[0] = hq[-1]
answer[1] = hq[0]
이런식으로 최댓값과 최솟값을 넣어줬는데 제출시 한개의 예외가 발생했다.
어떤 예외인지는 찾진 못했지만 확실하게 max,min 함수를 써주어 처리해주니 예외없이 정답이 나왔다.