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

코딩하는계란·2021년 3월 17일
0

프로그래머스

목록 보기
4/16
post-thumbnail

👉 이중우선순위큐



✍ 내 코드


from collections import defaultdict
import heapq as hq


def solution(operations):
    max_h = []
    min_h = []
    dic = defaultdict(int)
    for i in operations:
        com, num = i.split(" ")
        if com == "I":
            hq.heappush(min_h, int(num))
            hq.heappush(max_h, -int(num))
            dic[int(num)] += 1

        else:
            while num == "-1" and min_h:
                n = hq.heappop(min_h)
                if dic[n] != 0:
                    dic[n] -= 1
                    break

            while num == "1" and max_h:
                n = hq.heappop(max_h)
                if dic[-n] != 0:
                    dic[-n] -= 1
                    break
    max = min = 0
    while min_h:
        n = hq.heappop(min_h)
        if dic[n] != 0:
            dic[n] -= 1
            min = n
            break

    while max_h:
        n = hq.heappop(max_h)
        if dic[-n] != 0:
            dic[-n] -= 1
            max = -n
            break

    return [max, min]


✍ 팁

문제를 풀고나면 항상 다른 사람의 풀이를 한번 훑어보는데 좋아요를 가장 많이 받은 풀이가 매우 깔끔하길래 손으로 몇가지 케이스를 직접 해보니 틀린 코드였다.
해당 문제는 테스트 케이스가 미흡하여 통과하는 듯 하지만 위의 코드와 같이 동기화를 위한 추가적인 작업이 필요한 문제이다.

  • defaultdict를 통해 이미 pop된 수인지를 체크하여 동기화 작업(내 코드에서 while문)을 해주어야 한다.
profile
코딩💻 고양이😺

0개의 댓글