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

Sujin Lee·2022년 5월 9일
0

코딩테스트

목록 보기
32/172
post-thumbnail

풀이

import heapq
def solution(operations):
    heap = []
    for i in operations:
        # 숫자 삽입
        if i.startswith("I"):
            heapq.heappush(heap,int(i[2:]))
        else:
            # 값이 있다면
            if heap:
                # 최댓값 삭제
                if i[2:] == "1":
                    tmp = []
                    # 힙에 제일 뒤에 있는 값만(최댓값) 남겨두고 tmp에 append
                    while len(heap) > 1:
                        tmp.append(heapq.heappop(heap)) 
                    # 힙 완전히 비우기
                    heapq.heappop(heap)
                    # 최댓값을 삭제한 tmp를 힙으로 할당
                    heap = tmp
                # 최솟값 삭제
                else:
                    heapq.heappop(heap)
    # 힙이 비어있지않다면
    if heap:
        min_num = heapq.heappop(heap)
        max_num = min_num
        while heap:
            max_num = heapq.heappop(heap)
        return [max_num, min_num]
    return [0,0]
  • operations 내의 원소들을 하나씩 처리
  • I로 시작한다면 heap에 삽입
  • I로 시작하지 않고 heap에 값이 있다면
    • 인덱스 [2:]값이 1이라면 최댓값을 삭제
      • 임시 배열을 선언하고, heap 맨 앞에서부터 하나씩 pop해서 임시 배열에 삽입한다.
      • while문은 heap의 갯수가 1개 이상일 때까지 돈다 즉, 맨 마지막 1개를 남겨두고 반복문을 빠져나온다.
      • heap의 맨 마지막 값을 pop해서 삭제하고, 임시배열을 heap으로 할당
    • 1이 아니라면 최솟값을 삭제
  • heap이 비어져있지않다면
    • min_num을 할당하고
    • heap이 비워질때까지 반복문을 돌면서 max_num에 할당 즉, 제일 마지막 값이 max_num에 할당됨.
  • return [max_num, min_num]
profile
공부한 내용을 기록하는 공간입니다. 📝

0개의 댓글