띵유로그

[프로그래머스][힙]이중우선순위큐 본문

알고리즘

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

띵유 2020. 9. 6. 21:58
반응형

def solution(operations):
    answer = []
    heap=[]
    max_heap=[]
    import heapq
    for op in operations:
        if op.split(" ")[0]=='I':
            num=int(op.split(" ")[1])
            heapq.heappush(heap,num)
            heapq.heappush(max_heap,-num)
        else:
            if op.split(" ")[1]=='-1' and len(heap)!=0:
                heapq.heappop(heap)
            elif op.split(" ")[1]=='1' and len(heap)!=0:
                heapq.heappop(max_heap)
            max_heap=[-1*i for i in max_heap]
            heap=list(set(heap).intersection(set(max_heap)))
            max_heap=list(set(max_heap).intersection(set(heap)))
            max_heap=[-1*i for i in max_heap]
            heapq.heapify(heap)
            heapq.heapify(max_heap)
        
    if len(heap)==0:
        answer=[0,0]
    else:
        answer.append(-max_heap[0])
        answer.append(heap[0])
    return answer

겁나 비효율 적으로 풀었닼ㅋㅋㅋ
리스트에서 max값 빼는걸 생각을 못해서 min 힙, max힙 두개 구현했다.
최솟값 뺄때는 min에서 빼고, 최댓값 뺄때는 max에서 뺀후에 set으로 교집합을 구하고 다시 heap으로 만들었다,,,

최소힙만 구현하고 최댓값 뺄때는 heap.pop(max(heap))으로 하면 될것을,,,,

 

 

반응형
Comments