본문 바로가기

Programming/Python

[프로그래머스] 힙(Heap) - 이중우선순위큐 (Python3, 파이썬)

1. 문제

문제 요약

  •  이중 우선순위 큐가 명령어대로 동작하도록 구현해서 배열에 담긴 명령어들의 동작이 모두 끝난 뒤 큐의 상태를 return하자.
  •  주어지는 값 : 이중 우선순위 큐가 할 연산이 들어있는 operations 배열
  •  사용되는 공식 : 위 사진에 명령어에 대한 설명 있음.

2. 입출력 예시와 설명

3. 코드

- 내가 시도한 코드 (힙 사용)

import heapq

def solution(operations):
    answer = []
    heapq.heapify(answer)
    for x in operations:
        i,j = x.split()
        if (i == "I"):
            j=int(j)
            heapq.heappush(answer,j)
        elif (x == "D -1"):
            if(answer):
                heapq.heappop(answer)
        else:
            if(answer):
                answer.pop(answer.index(heapq.nlargest(1, answer)[0]))
            
    if answer:
        return [heapq.nlargest(1, answer)[0], heapq.nsmallest(1, answer)[0]]
    else:
        return [0, 0]

처음에 코드를 짰을 때는 계속 [0,0]만 출력됐었고, 두 번째로 코드를 짰을 때는 2가지 테스트 케이스 중 1가지만 계속 통과되었다. 로컬 python idle에서 여러 번 시도하며 print() 코드를 단계마다 추가하고 실행하길 반복한 결과 테스트 케이스 2가지 모두 통과했다. 하지만 제출 후 채점하기 한 결과... 문제가 뭔지 다시 발견하고 고친 결과 통과 성공!

 

코드 설명

-> heapq 내장 모듈을 불러온다. heapify 로 힙으로 바꿔준다. for문으로 operations의 값들을 하나씩 처리해준다.

for문 안의 if문으로 3가지 명령어의 처리가 잘 될 수 있게 분류한다.  return이 되기 전에 if문으로 최소값과 최대값을 선별해준다. answer에 값이 없다면 [0,0]을 return 해준다.