이중우선순위큐
명령어 수신 탑(높이) I 숫자 큐에 주어진 숫자를 삽입합니다. D 1 큐에서 최댓값을 삭제합니다. D -1 큐에서 최소값을 삭제합니다. 이중 우선순위 큐가 할 연산 operations가 매개변수로 주어질 때, 모든 연산을 처리한 후 큐가 비어있으면 [0,0] 비어있지 않으면 [최댓값, 최솟값]을 return 하도록 solution 함수를 구현해주세요.
이중 우선순위 큐가 할 연산 operations가 매개변수로 주어질 때, 모든 연산을 처리한 후 큐가 비어있으면 [0,0] 비어있지 않으면 [최댓값, 최솟값]을 return 하도록 solution 함수를 구현해주세요.
operations | return |
---|---|
["I 16", "I -5643", "D -1", "D 1", "D 1", "I 123", "D -1"] | [0, 0] |
["I -45", "I 653", "D 1", "I -642", "I 45", "I 97", "D 1", "D -1", "I 333"] | [333, -45] |
원래 힙 계산할 때 remove를 쓰면 구조가 망가지기 때문에 remove -> heapify 를 써준다는데 이번 문제는 테케가 별로 없어서 통과가 된 것 같다
import heapq
def solution(operations):
answer = []
q = []
for operation in operations:
x, num = operation.split()
num = int(num)
print(x, num)
if x == 'I':
heapq.heappush(q, num)
elif x == 'D' and num == 1:
if len(q) != 0:
max_value = max(q)
q.remove(max_value)
else:
if len(q) != 0:
heapq.heappop(q)
if len(q) == 0:
answer = [0, 0]
else:
answer = [max(q), heapq.heappop(q)]
return answer
글 잘 봤습니다, 많은 도움이 되었습니다.