이중 우선순위 큐는 다음 연산을 할 수 있는 자료구조를 말합니다.
명령어 | 수신 탑(높이) |
---|---|
I 숫자 | 큐에 주어진 숫자를 삽입합니다. |
D 1 | 큐에서 최댓값을 삭제합니다. |
D -1 | 큐에서 최솟값을 삭제합니다. |
이중 우선순위 큐가 할 연산 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] |
입출력 예 #1
따라서 [0, 0]을 반환합니다.
입출력 예 #2
이중 우선순위 큐에 -45, 45, 333이 남아있으므로, [333, -45]를 반환합니다.
def solution(operations):
heap = []
for op in operations:
command, num = op.split()
heap = process(heap,command,int(num))
return check(heap)
operations 리스트를 순회하며 문제 조건에 맞는 힙 연산을 수행한다.
최종 힙을 문제 조건에 따라 결과를 출력한다.
def process(heap,command,num):
if command == 'I':
h.heappush(heap,num)
if command == 'D':
if heap:
if num == -1:
h.heappop(heap)
if num == 1:
heap = max_heappop(heap)[1]
return heap
def max_heappop(heap):
my_max_heap = [-1 * x for x in heap]
h.heapify(my_max_heap)
value = -1*h.heappop(my_max_heap)
my_min_heap = [-1 * x for x in my_max_heap]
h.heapify(my_min_heap)
return (value,my_min_heap)
def check(heap):
if not heap:
return [0,0]
return [max_heappop(heap)[0],h.heappop(heap)]
import heapq as h
def max_heappop(heap):
my_max_heap = [-1 * x for x in heap]
h.heapify(my_max_heap)
value = -1*h.heappop(my_max_heap)
my_min_heap = [-1 * x for x in my_max_heap]
h.heapify(my_min_heap)
return (value,my_min_heap)
def process(heap,command,num):
if command == 'I':
h.heappush(heap,num)
if command == 'D':
if heap:
if num == -1:
h.heappop(heap)
if num == 1:
heap = max_heappop(heap)[1]
return heap
def check(heap):
if not heap:
return [0,0]
return [max_heappop(heap)[0],h.heappop(heap)]
def solution(operations):
heap = []
for op in operations:
command, num = op.split()
heap = process(heap,command,int(num))
return check(heap)
from heapq import heappush, heappop
def solution(arguments):
max_heap = []
min_heap = []
for arg in arguments:
if arg == "D 1":
if max_heap != []:
heappop(max_heap)
if max_heap == [] or -max_heap[0] < min_heap[0]:
min_heap = []
max_heap = []
elif arg == "D -1":
if min_heap != []:
heappop(min_heap)
if min_heap == [] or -max_heap[0] < min_heap[0]:
max_heap = []
min_heap = []
else:
num = int(arg[2:])
heappush(max_heap, -num)
heappush(min_heap, num)
if min_heap == []:
return [0, 0]
return [-heappop(max_heap), heappop(min_heap)]