코테 공부

프로그래머스 이중우선순위큐 (파이썬 풀이)

moonsun623 2021. 11. 30. 22:30
반응형

https://programmers.co.kr/learn/courses/30/lessons/42628?language=python3 

 

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

 

programmers.co.kr

 

내가 한 풀이

import heapq
def solution(operations):
    answer = []
    heap=[]
    for o in operations:
        o=o.split()
        if  o[0]=='I':
            num=int(o[1])
            heapq.heappush(heap,num)
        else:
            if len(heap)==0:
                pass
            
            elif o[1]=='-1':
                heapq.heappop(heap)

            elif o[1]=='1':
                heap = heapq.nlargest(len(heap), heap)[1:]
                heapq.heapify(heap)          
    if heap:
        return [heapq.nlargest(1,heap)[0],heapq.heappop(heap)]
    else:
        return [0,0]

처음에는 최대힙과, 힙을 각각 만들어 구현하려 했는데

heapq의 메소드 중 nlargest를 알게되었다.

heapq.nlargest(n, heap) = heap중 큰 수 n 개를 뽑아 리스트로 리턴