Coding Test/Python

[프로그래머스] 이중우선순위큐 (level3, python)

lim.dev 2024. 1. 16. 16:04

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

 

프로그래머스

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

programmers.co.kr

 

아이디어

heap의 heappop과 list의 pop을 사용해서 풀었다.

 

elif operation == "D 1": # 최댓값 삭제
    queue.sort()
    queue.pop()

최댓값을 삭제할 때는 리스트 정렬 후 pop 해주고, 

 

elif operation == "D -1": # 최솟값 삭제
    heapify(queue)
    heappop(queue)

최솟값을 삭제할 때는 heapify로 리스트를 힙 구조로 바꾼 뒤 heappop 해주었다.

 

 

전체 코드

from heapq import heappush, heappop, heapify

def solution(operations):
    queue = []
    
    for operation in operations:
        if operation[0] == "I":
            heappush(queue, int(operation.split()[1]))
        elif len(queue) == 0: continue
        elif operation == "D 1": # 최댓값 삭제
            queue.sort()
            queue.pop()
        elif operation == "D -1": # 최솟값 삭제
            heapify(queue)
            heappop(queue)
            
    if len(queue) == 0 : return [0,0]
    
    return [max(queue), min(queue)]