컴퓨터공학/알고리즘 문제 풀이

[백준] 2839 설탕 배달

TaeGyeong Lee 2023. 7. 2. 21:07

요약

DP bottom-up 방식으로 문제를 풀면 됩니다. 기존 존재하는 값과의 비교를 통해 최솟값을 갱신하는 구조, 문제 풀이에는 크게 문제가 없었지만 index out of range 에러를 방지하기 위한 N 과 i+3, i+5 과의 비교 식을 잘못 작성하였었습니다.

 

솔루션

def getMinCount(N):
    
    dp = [-1 for _ in range(N+1)]
    
    if N >= 3:
        dp[3] = 1
    if N >= 5:
        dp[5] = 1
    
    for i, v in enumerate(dp):
        if v == -1:
            continue
            
        if N >= i+3:
            if dp[i+3] == -1 or v+1 < dp[i+3]:
                dp[i+3] = v+1
        if N >= i+5:
            if dp[i+5] == -1 or v+1 < dp[i+5]:
                dp[i+5] = v+1
            
    return dp[N]

N = int(input())
answer = getMinCount(N)
print(answer)