본문 바로가기

Python

[좌충우돌, 파이썬으로 자료구조 구현하기] 더 맵게 - 프로그래머스

문제

https://school.programmers.co.kr/learn/courses/30/lessons/42626

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이

가장 안 매운 스코빌 지수와 두번째로 안 매운 스코빌 지수를 섞는다고 하니 우선순위가 있는 큐 자료구조인 힙으로 구현할 수 있다.

최소 힙 구조를 떠올리면 heappop을 2번하여 나온 결과를 다시 최소힙에 heappush 하는 과정을 반복하면서 루트 노드에 있는 요소가 주어진 K보다 크면 섞은 횟수를 반환한다.

 

import heapq

def solution(scoville,K):
	answer = 0
    s = scoville[:] # 스코빌 배열 복사
    heapq.heapify(s)
    
    while s and s[0] < K:
    	try:
            new_food = heapq.heappop(s) + heapq.heappop(s) * 2
            heapq.heappush(s, new_food)
            answer += 1
        except:
	    return -1
    return answer
  • try...except 구문없이 실행해보니, heappop을 2번하는 과정에서 런타임 에러가 발생하였다. 런타임 오류가 발생할 때 까지 반복을 했다는 것은 주어진 K를 만족할 때까지 섞어도 찾을 수 없는 경우이기 때문에 except 구문으로 -1을 반환하도록 구현했다.