[프로그래머스 | Python] 이중우선순위큐

게으른 완벽주의자·2023년 1월 24일
0

프로그래머스

목록 보기
6/83
post-custom-banner

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

파이썬의 heapq는 최소힙으로 구성되어있다
하나의 큐에 최소/최대 우선순위를 같이 할 수 없으니 최소힙, 최대힙을 각각 만들어 준 후 값을 삭제할 때마다 다른 힙에서도 값을 삭제해준다.
최대힙을 만드는 방법은 최소힙에 넣는 num값에 -를 붙여서 넣어주고, 최소힙에서 값을 삭제할 때도 -를 붙인 값을 삭제해주면 된다.
return 값은 [최대값, 최소값]을 출력하면 되므로 최대힙과 최소힙에서 pop되는 첫 번째 값들을 넣어주는데, 최대값은 -를 떼고 넣어준다.

import heapq

def solution(operations):
    answer = []
    minheap = []
    maxheap = []
    for operation in operations:
        opt, num = operation.split()
        if opt=="I":
            heapq.heappush(minheap, int(num))
            heapq.heappush(maxheap, -int(num))
            
        else:
            try:
                #최솟값 삭제
                if int(num)==-1:
                    minvalue = heapq.heappop(minheap)
                    maxheap.remove(-minvalue)
                #최댓값 삭제
                elif int(num)==1:
                    maxvalue = heapq.heappop(maxheap)
                    minheap.remove(-maxvalue)
            except:
                continue
    
    if len(maxheap)!=0:
        answer.append(-heapq.heappop(maxheap))
    else:
        answer.append(0)
        
    if len(minheap)!=0:
        answer.append(heapq.heappop(minheap))
    else:
        answer.append(0)
           
    
    return answer
profile
데이터를 공부하고 있습니다
post-custom-banner

0개의 댓글