[python] 프로그래머스 이중우선순위큐 파이썬

hyewon9913·2024년 6월 25일
0

코딩테스트(python)

목록 보기
31/46

문제

문제 자체는 어렵지가 않은데 heap문제를 접해보지 않아서 heapq의 사용법을 몰라서 이 부분을 구글링을 통해 공부하여 문제를 해결해주었다.

여기서 heap에 대해 정리를 해보자면

일단

import heapq

를 통해서 import를 먼저 진행해준다.

기본적인 heap 사용법은 이렇다.

heapq.heappush(heap, item) : item을 heap에 추가
heapq.heappop(heap) : heap에서 가장 작은 원소를 pop & 리턴. 비어 있는 경우 IndexError가 호출됨.
heapq.heapify(x) : 리스트 x를 즉각적으로 heap으로 변환함 (in linear time, O(N) )

이때 heapq 모듈은 최소힙으로 구성되어있기 때문에 최대힙을 구성하기 위해서는 살짝의 변형이 필요하다

heapq.heappush(max_heap, (-item, item))

이렇게 진행해주면 최대힙을 만들 수 있다.

이렇게 heapq에 대해서 숙지한 후 이를 이용해 문제를 해결해 주었다.

코드

import heapq

def solution(operations):
    answer = [0,0]
    hq = []
    
    def i(x):
        heapq.heappush(hq,x)
        
    def d():
        del hq[-1]
    def d_1():
        del hq[0]
            
    for o in operations:
        tmp = o.split()
        
        if tmp[0] == 'I':
            i(int(tmp[1]))
        elif tmp[0] == 'D':
            if len(hq)!= 0 :
                if tmp[1] == '-1':
                    d_1()
                else:
                    d()
            else:
                continue
                    
    
    if len(hq)>0:
        answer[0] = max(hq)
        answer[1] = min(hq)
        
    return answer

이때 처음에는

if len(hq) > 0:
    answer[0] = hq[-1]
    answer[1] = hq[0]

이런식으로 최댓값과 최솟값을 넣어줬는데 제출시 한개의 예외가 발생했다.

어떤 예외인지는 찾진 못했지만 확실하게 max,min 함수를 써주어 처리해주니 예외없이 정답이 나왔다.

profile
차근차근 굴러가는 코딩일지

0개의 댓글