본문 바로가기
알고리즘/자료구조

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

by 임짠짠 2023. 2. 3.
반응형
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

코드

from heapq import heappush,heappop
def solution(operations):
    max_h = []
    min_h = []
    for i in operations:
        comm, num = i.split()
        if comm == 'I':
            heappush(max_h,-int(num))
            heappush(min_h,int(num))
        elif comm == 'D' and min_h: 
            if int(num) == 1:  #최댓값 삭제
                n = -heappop(max_h)
                min_h.remove(n)
            elif int(num) == -1:  #최솟값 삭제
                n = -heappop(min_h)
                max_h.remove(n)
    if min_h:
        return [-heappop(max_h),heappop(min_h)]
    else:
        return [0,0]

 

설명

최소힙과 최대힙 두 개를 만들어서 각각 최솟값과 최댓값을 구하기 위해 사용했다.

 

명령어가 I 인 경우  heapq는 최소힙으로 구현되어 있기 때문에 최대힙을 만들기 위해서는 값에 - 를 붙여서 넣어줘야 한다.

명령어가 D 인 경우 -1 이면 최대힙에서 최댓값을 먼저 빼내고 변수 n에 -를 붙여 저장하였고, remove를 사용하여 최소힙에서도 삭제해줬다. 1 인 경우 반대로 하면 된다.

반응형

댓글