프로그래머스 이중우선순위큐

wook2·2021년 6월 27일
1

알고리즘

목록 보기
11/117

최대힙과 최소힙을 만들고 두 힙을 동기화시켰다.
이렇게 하는 이유는 최댓값이나 최솟값을 pop할때 힙을 통해 pop을 하게되면 빠르게 처리할 수 있기 때문이다.

두개의 힙을 만들었지만, 파이썬 heapq 공식문서를 참고해보니 아래와 같은 기능이 있었다.

출처 : https://docs.python.org/ko/3/library/heapq.html

import heapq
def solution(operations):
    answer = []
    max_heap = []
    min_heap = []
    for operation in operations:
        op = operation.split(' ')
        if op[0] == 'I':
            heapq.heappush(max_heap,-int(op[1]))
            heapq.heappush(min_heap,int(op[1]))
        else:
            if op[1] == '1':
                if len(max_heap) == 0:
                    continue
                x = heapq.heappop(max_heap)
                min_heap.remove(-x)
            else:
                if len(max_heap) == 0:
                    continue
                x = heapq.heappop(min_heap)
                max_heap.remove(-x)
    if len(max_heap) == 0:
        return [0,0]
    elif len(max_heap) == 1:
        a = heapq.heappop(max_heap)
        return [a,a]
    else:
        a = heapq.heappop(max_heap)
        b = heapq.heappop(min_heap)
        return [-a,b]
profile
꾸준히 공부하자

0개의 댓글