[파이썬] 더 맵게

문제 출처 : 프로그래머스 더 맵게


👩‍🦰 나의 풀이

import heapq
def solution(scoville, K):
    answer = 0
    heapq.heapify(scoville)		#리스트를 힙으로 변환
    while scoville[0]<K:		#힙은 자동으로 정렬되기 때문에 0번째 인덱스가 가장 작음
        try:
            heapq.heappush(scoville, heapq.heappop(scoville)+heapq.heappop(scoville)*2)
        except IndexError:
            return -1
        answer+=1
    return answer코드를 입력하세요

힙 scoville의 0번째 인덱스 값이 K보다 작을 동안에만 while문을 실행한다.

힙에서 더이상 pop할 요소가 없을 때 IndexError로 처리되어 -1이 반환된다.


import heapq
def solution(scoville, K):  # 스코빌 지수 배열, 원하는 스코빌 지수 
    answer = 0
    heapq.heapify(scoville) # 힙으로 변환

    while len(scoville) > 1 :	# 값이 2개 이상 있어야 연산 가능
        answer+=1
        first=heapq.heappop(scoville)	# 가장 작은 값
        second=heapq.heappop(scoville)	# 두 번째로 작은 값
        heapq.heappush(scoville, first+second*2)
        if scoville[0] >= K :
            return answer   # 모든 음식의 스코빌 지수를 K이상으로 만들기 위해 섞는 최소 횟수
                        
    # 모두 K이상이 안 되면 -1
    return -1   코드를 입력하세요

scoville의 길이가 2이상일 동안 반복문이 작동한다. 반복문이 끝난 후 return -1을 하는 것은 모든 음식의 스코빌 지수가 K이상이 안 된다는 것이다.


👩‍🦳 다른 사람 풀이
import heapq as hq

def solution(scoville, K):

    hq.heapify(scoville)
    answer = 0
    while True:
        first = hq.heappop(scoville)
        if first >= K:
            break
        if len(scoville) == 0:
            return -1
        second = hq.heappop(scoville)
        hq.heappush(scoville, first + second*2)
        answer += 1  

    return answer코드를 입력하세요

일차적으로 힙 scoville에서 뽑은 값을 K와 비교한 뒤 scoville의 길이가 0인지 보고있다.

Indexerror을 막기위해 힙의 길이가 0일 경우 바로 -1을 리턴한다.

좋은 웹페이지 즐겨찾기