나의 개발일지

[프로그래머스] Lv.3 이중 우선순위 큐 [Python, 파이썬] 본문

프로그래머스

[프로그래머스] Lv.3 이중 우선순위 큐 [Python, 파이썬]

YoonJuHan 2023. 9. 1. 17:34
  • 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/42628
  • 힙(heap)
  • 🔑 최솟값 제거는 heappop()을 사용
  • 🔑 최댓값 제거를 위해 pop()을 했으나 힙 자료구조는 모든 원소를 정렬하지 않기 때문에 마지막 값이 최댓값이라는 보장이 없다.
  • 🔑 그래서 최댓값을 구할 때는 sort()로 새롭게 정렬을 해주고 pop()을 했다. (정답 리턴 때도 마찬가지)

 

from heapq import *

def solution(operations):
    
    heap = []
    
    for i in operations:
        if i[0] == "I":
            heappush(heap, int(i[2:]))  # 숫자 부분만 슬라이싱, 형 변환 후 힙에 추가
        elif i == "D -1" and heap:
            heappop(heap)               # 최솟값 제거
        elif i == "D 1" and heap:
            heap.sort()                 # 힙을 다시 정렬 (heapq는 정렬을 끝까지 하지 않기 때문)
            heap.pop()                  # 최댓값 제거
    
    heap.sort()     # 힙을 다시 정렬 (heapq는 정렬을 끝까지 하지 않기 때문)
    if heap:
        return [heap[-1], heap[0]]  # [최댓값, 최솟값] 리턴
    
    return [0, 0]   # 비어 있으면 [0, 0] 리턴
Comments