프로그래머스 level2 더 맵게

Kim Yongbin·2023년 9월 6일
0

코딩테스트

목록 보기
45/162

Problem

https://school.programmers.co.kr/learn/courses/30/lessons/42626?language=python3#

Solution

내 풀이 - 실패

import heapq

def solution(scoville, K):
    start = len(scoville)
    
    min_value = heapq.heappop(scoville)
    while len(scoville) > 0 and min_value < K:
        min2_value = heapq.heappop(scoville)
        heapq.heappush(scoville, min_value + 2 * min2_value)
        
        min_value = heapq.heappop(scoville)
    
    if min_value < K:
        return -1

    return start - len(scoville) - 1

입력 받은 scoville을 힙으로 만들지 않고 바로 썼더니 예외처리에 걸렸다.

import heapq

def solution(scoville, K):
    start = len(scoville)
    hq = []
    for s in scoville:
        heapq.heappush(hq, s)
    
    min_value = heapq.heappop(hq)
    while len(hq) > 0 and min_value < K:
        min2_value = heapq.heappop(hq)
        heapq.heappush(hq, min_value + 2 * min2_value)
        
        min_value = heapq.heappop(hq)
    
    if min_value < K:
        return -1

    return start - len(hq) - 1

로직은 그대로 두고 힙으로 만들어서 진행하였더니 통과되었다.

다른 사람 풀이

import heapq

def solution(scoville, K):
    hq = []
    for s in scoville:
        heapq.heappush(hq, s)
    
    count = 0
    while hq[0] < K:
        try:
            heapq.heappush(
                hq, heapq.heappop(hq) + heapq.heappop(hq) * 2
            )
        except IndexError:
            return -1
        count += 1
    
    return count

예외처리를 통해 간단하게 구현한 풀이이다. 회사에서 예외처리를 그렇게 많이 쓰면서 생각 못한게 아쉽다.

Reference

https://itholic.github.io/kata-more-spicy/

profile
반박 시 여러분의 말이 맞습니다.

0개의 댓글