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

dada·2023년 2월 17일
0

algorithm

목록 보기
1/5
post-thumbnail

1. 문제

이중 우선순위 큐는 다음 연산을 할 수 있는 자료구조를 말합니다.

명령어수신탑(높이)
I숫자큐에 주어진 숫자를 삽입합니다.
D1큐에서 최댓값을 삭제합니다.
D-1큐에서 최솟값을 삭제합니다.

이중 우선순위 큐가 할 연산 operations가 매개변수로 주어질 때, 모든 연산을 처리한 후 큐가 비어있으면 [0,0] 비어있지 않으면 [최댓값, 최솟값]을 return 하도록 solution 함수를 구현해주세요.

2. 입출력 예

operationsreturn
["I 16", "I -5643", "D -1", "D 1", "D 1", "I 123", "D -1"][0,0]
["I -45", "I 653", "D 1", "I -642", "I 45", "I 97", "D 1", "D -1", "I 333"][333, -45]

2-1. 입출력 예 설명

입출력 예 #1

  • 16과 -5643을 삽입합니다.
  • 최솟값을 삭제합니다. -5643이 삭제되고 16이 남아있습니다.
  • 최댓값을 삭제합니다. 16이 삭제되고 이중 우선순위 큐는 비어있습니다.
  • 우선순위 큐가 비어있으므로 최댓값 삭제 연산이 무시됩니다.
  • 123을 삽입합니다.
  • 최솟값을 삭제합니다. 123이 삭제되고 이중 우선순위 큐는 비어있습니다.

따라서 [0, 0]을 반환합니다.

입출력 예 #2

  • -45와 653을 삽입후 최댓값(653)을 삭제합니다. -45가 남아있습니다.
  • -642, 45, 97을 삽입 후 최댓값(97), 최솟값- (-642)을 삭제합니다. -45와 45가 남아있습니다.
  • 333을 삽입합니다.

이중 우선순위 큐에 -45, 45, 333이 남아있으므로, [333, -45]를 반환합니다.

3. 풀이

def solution(operations):
    answer = []
    for i in operations:
        if i[0] == "I":
            answer.append(int(''.join(i[2:])))
        elif i[0] == "D":
            cnt = 0
            num = int(i[2:])
            if len(answer)!=0:
                if num == 1:
                    answer.pop(answer.index(max(answer)))
                elif num == -1:
                    answer.pop(answer.index(min(answer)))
    if len(answer)==0:
        return [0,0]
    else:
####         return [max(answer), min(answer)]

4. 채점 결과

프로그래머스 문제 바로가기

profile
AI, Python 등 공부용 블로그

0개의 댓글