알고리즘 풀이/프로그래머스

[Level 3] 이중우선순위큐

mhko411 2021. 9. 9. 17:54
728x90

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

 

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

 

programmers.co.kr


접근

힙을 이용하여 주어진 명령어대로 최댓값을 삭제하거나 최솟값을 삭제한다.

 

구현

- 빈 배열인 numbers를 선언한다.

- 주어진 operations를 탐색하여 명령어와 숫자를 분리하고

- 명령이 I일 때는 heappush로 숫자를 numbers에 대입한다. 이를 통해 numbers는 오름차순으로 정렬될 것이다.

- 명령어가 D이고 numbers가 비어있지 않을 때는 

- 숫자가 1일 때 리스트 메서드인 pop으로 최댓값을 삭제하고 -1일 때는 heappop로 최솟값을 삭제한다.

- 연산을 모두 완료했을 때 numbers가 비어있다면 [0, 0]을 대입하고

- 그렇지 않다면 최댓값, 최솟값을 대입한다.

from heapq import heapify, heappop, heappush
def solution(operations):
    answer = []
    numbers = []
    for op in operations:
        op = op.split(' ')
        cmd = op[0]
        number = int(op[1])
        if cmd == 'I':
            heappush(numbers, number)
        elif cmd == 'D' and numbers:
            if number == 1:
                numbers.pop()
            else:
                heappop(numbers)
    if not numbers:
        answer = [0, 0]
    else:
        answer = [max(numbers), min(numbers)]
    return answer

'알고리즘 풀이 > 프로그래머스' 카테고리의 다른 글

[Level 3] 단어 변환  (0) 2021.09.10
[Level 3] 불량 사용자  (0) 2021.09.10
[Level 2] 행렬 테두리 회전하기  (0) 2021.09.09
[Level 3] 보석 쇼핑  (0) 2021.09.08
[Level 3] 징검다리 건너기  (0) 2021.09.07