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

코테 문제 풀이

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

미니모아 2022. 4. 15. 16:08
반응형

이중우선순위큐

문제 설명

이중 우선순위 큐는 다음 연산을 할 수 있는 자료구조를 말합니다.

명령어수신 탑(높이)

I 숫자 큐에 주어진 숫자를 삽입합니다.
D 1 큐에서 최댓값을 삭제합니다.
D -1 큐에서 최솟값을 삭제합니다.

이중 우선순위 큐가 할 연산 operations가 매개변수로 주어질 때, 모든 연산을 처리한 후 큐가 비어있으면 [0,0] 비어있지 않으면 [최댓값, 최솟값]을 return 하도록 solution 함수를 구현해주세요.

제한 조건

  • operations는 길이가 1 이상 1,000,000 이하인 문자열 배열입니다.
  • operations의 원소는 큐가 수행할 연산을 나타냅니다.
    • 원소는 “명령어 데이터” 형식으로 주어집니다.- 최댓값/최솟값을 삭제하는 연산에서 최댓값/최솟값이 둘 이상인 경우, 하나만 삭제합니다.
  • 빈 큐에 데이터를 삭제하라는 연산이 주어질 경우, 해당 연산은 무시합니다.

풀이

 

힙으로 넣으면 최소 값을 꺼낼 때는 O(1)

최대 값 찾을 때는 ? 1개 남을 때까지 다 꺼내

다 꺼낸 거를 담아놨다가 원래 힙이랑 바꿔치기

마지막에 원소가 1개 남을 경우 최솟값 = 최댓값이므로 최댓값을 최솟값으로 초기화 시켜 놓고 힙에 남은 원소 있을 때까지 다 꺼내서 업데이트 해줬다.

import heapq
def solution(operations):
    heap = []
    
    for op in operations:
        o, n = op.split()
        if o == 'I': # 삽입
            heapq.heappush(heap, int(n))
        else:
            if heap:
                if n == '1': # 최댓값 삭제
                    tmp = []
                    while len(heap) > 1:
                        tmp.append(heapq.heappop(heap))
                    heapq.heappop(heap)
                    heap = tmp
                else: # 최솟값 삭제
                    heapq.heappop(heap)
    if heap:
        min_value = heapq.heappop(heap)
        max_value = min_value
        while heap:
            max_value = heapq.heappop(heap)
        return [max_value, min_value]
    return [0,0]

효율성 검사도 없어서 그냥 통과했다 ..

반응형
Comments