문제풀이/기타

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

딜레이레이 2022. 10. 7. 10:28
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

코드

import heapq

def solution(operations):
    min_q = []
    max_q = []
    for op in operations:
        if op[0] == "I":
            heapq.heappush(min_q, int(op[2:]))
            heapq.heappush(max_q, -int(op[2:]))
        elif op == "D 1":
            if not min_q:
                continue
            min_q.remove(-heapq.heappop(max_q))
        else:
            if not min_q:
                continue
            max_q.remove(-heapq.heappop(min_q))
    if min_q:
        return [-heapq.heappop(max_q), heapq.heappop(min_q)]
    else:
        return [0,0]

파이썬의 heapq 모듈을 이용하여 풀이하였다. heapq는 최소힙을 구현해주므로 min_q에는 입력받은 숫자를 그대로 넣고, max_q에는 최대값이 가장 앞에 올 수 있도록 입력받은 숫자를 음수로 변환해서 넣어주었다.