본문 바로가기
알고리즘/프로그래머스 level 3

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

by 코딩개미뚠뚠 2021. 8. 30.
반응형
def solution(operations):
    answer = []
    for i in operations:
        if "I" in i:
            answer.append(int(i[2:]))
        elif "D" in i:
            if i[2] == "1" and answer:
                answer.remove(max(answer))
            elif answer:
                answer.remove(min(answer))
                
    if answer:
        return max(answer), min(answer)
    else:
        return [0,0]

우선 정말 간단하게 풀어본 풀이이다. 이중우선순위큐라는 문제답지 않게 풀었다. 시간초과가 나올 줄 알았는데 의외로 시간 제한은 없었나 보다.

 

그래도 문제의 의도대로 heap을 사용해서 풀어보았다.

from heapq import heappush, heappop

def solution(arguments):
    max_heap = [] #최대힙
    min_heap = [] #최소힙
    for arg in arguments:
        if arg == "D 1":
            if max_heap:
                heappop(max_heap)
                if max_heap == [] or -max_heap[0] < min_heap[0]:
                    min_heap = []
                    max_heap = []
        elif arg == "D -1":
            if min_heap:
                heappop(min_heap)
                if min_heap == [] or -max_heap[0] < min_heap[0]:
                    max_heap = []
                    min_heap = []
        else:
            num = int(arg[2:])
            heappush(max_heap, -num)
            heappush(min_heap, num)
    if min_heap == []:
        return [0, 0]
    return [-heappop(max_heap), heappop(min_heap)]
반응형

댓글