본문 바로가기

알고리즘/프로그래머스

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

문제를 정리해보자.

 

l 숫자 => 큐에 숫자 삽입

D 1 => 큐에서 최댓값 삭제

D -1 => 큐에서 최솟값 삭제

 

단, 큐가 비어있는 상태에서 D 명령이 들어오면 무시한다.

 

최종 결과는 큐가 비어있다면 [0, 0]으로 아니라면, [최댓값, 최솟값]으로 출력한다.

 

 

리스트에 값을 넣을 때마다 정렬하는 방법을 선택했다.

 

 

from collections import deque


def solution(operations):
    li = []

    for string in operations:
        alpha, num = string.split()

        if alpha == "I":  # 삽입
            li.append(int(num))
            li = deque(sorted(li))

        elif li:
            if alpha == "D" and num == "1":  # 최댓값 삭제
                li.pop()

            else:  # 최솟값 삭제
                li.popleft()

    if not li:
        return [0, 0]
    else:
        return [li[-1], li[0]]  # 최대, 최소


print(solution(["I -45", "I 653", "D 1", "I -642", "I 45", "I 97", "D 1", "D -1", "I 333"]))