프로그래머스) 이종우선순위큐

유병수·2023년 4월 13일
0

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

heap을 사용한 문제. 계속 IDE의 도움을 받다가 이번에 네이버 준비를 하면서 IDE 없이 문제를 풀고있는데 heapq의 사용법이 잘 기억안나서 고생했다.

숫자를 넣어줄떄는 heapify를 사용하고 최소값을 뺄때는 그냥 heappop() 최댓값을 뺄때는 -1을 곱해주고 heappop을 한뒤에 다시 -1을 곱해서 heappush로 넣어줬다.

import heapq
import collections

def make_reverse(heapq_list):
    temp_list = []
    
    while heapq_list:
        heapq.heappush(temp_list,-heapq.heappop(heapq_list))
    heapq.heappop(temp_list)
    
    temp_list2 = []
    while temp_list:
        heapq.heappush(temp_list2,-heapq.heappop(temp_list))
    return temp_list2

def solution(operations):
    answer = []
    num_heap = []
    operations = collections.deque(operations)
    while operations:
        popleft = operations.popleft()
        num_list = list(popleft)
        if num_list[0] == "I":
            heapq.heappush(num_heap,int("".join(num_list[1:])))
        elif num_list[0] == "D":
            if len(num_heap) > 0:
                if num_list[2] == "-":
                    heapq.heappop(num_heap)
                else:
                    num_heap = make_reverse(num_heap)
    
    print(num_heap)
    
    if len(num_heap) < 2:
        answer = [0,0]
    else:
        answer = [max(num_heap),min(num_heap)]
    
    return answer

0개의 댓글