본문으로 바로가기

https://programmers.co.kr/learn/courses/30/lessons/42628

 

코딩테스트 연습 - 이중우선순위큐

 

programmers.co.kr

import heapq

def solution(operations):
    max_heap = []
    min_heap = []
    
    for i in operations:
        a, b = i.split(" ")
        b = int(b)
        if a == 'I':
            heapq.heappush(max_heap, -b)
            heapq.heappush(min_heap, b)
        if a == 'D' and b == 1:
            if not max_heap or not min_heap:
                continue
            min_heap.remove(-heapq.heappop(max_heap))
        elif a == 'D' and b == -1:
            if not max_heap or not min_heap:
                continue
            max_heap.remove(-heapq.heappop(min_heap))
    
    return [0, 0] if not max_heap else [-max_heap[0], min_heap[0]]

최대힙과 최소힙을 이용하여 풀었다.

파이썬의 heapq는 default가 최소힙이기 때문에,최대힙을 구현하기 위해서 push와 pop을 할 때 - 부호를 붙여주는 방식으로 해결할 수 있다.heapq에 익숙해지는 것도 필요할 것 같다.