프로그래머스 / 이중우선순위큐 / python

맹민재·2023년 4월 26일
0

알고리즘

목록 보기
78/134
from heapq import heappop, heappush, heapify

def solution(operations):
    answer = []
    mi = []
    ma = []
    for oper in operations:
        d, n = oper.split(' ')
        if d != 'D':
            heappush(mi, int(n))
            heappush(ma, -int(n))
        else:
            if len(mi) == 0:
                continue
                
            if int(n) == 1:
                mi.remove(-heappop(ma))
                heapify(mi)
            else:
                ma.remove(-heappop(mi))
                heapify(ma)
                
    if len(ma):
        m = heappop(ma)
        answer.append(-m)
    else:
        answer.append(0)
        
    if len(mi):
        m = heappop(mi)
        answer.append(m)
    else:
        answer.append(0)
        
    return answer

최소 힙과 최대 힙 둘을 사용해서 해결했다.
하지만 이게 효율적인 코드인지는 잘 모르겠다. 최대값이나 최소값을 제거할때 두개의 리스트가 연동되어야하므로 다른 하나에서 그 값을 제거하기 위해서 remove 연산을 하고 remove하면 heap 구조가 깨지므로 다시 heapify를 해줘야 한다. remove, heapify 둘다 시간 복잡도가 O(n)이다.

현재 제공된 테스트 케이스의 경우 그렇게 많은 양이 없어서 통과했지만
100만개의 데이터가 주어진다면 시간 초과가 나올것 같은 코드이다.

profile
ㄱH ㅂrㄹ ㅈr

0개의 댓글