본문 바로가기
Algorithm(BOJ, Python)/Dynamic Programing

[백준_16194] 카드 구매하기2 python

by kurooru 2022. 7. 17.

최솟값들의 후보자들을 조사하는 과정을 구현하는 것이

i-j라고 생각하는데 왜 이렇게 많은 시간을 들였을까

자만하지말자,,,

# n 입력
n = int(input())

# p 설계
p = [0]

# p 입력
p.extend(list(map(int, input().split())))

# dp 설계
dp = [
    0 for _ in range(n + 1)
]

# dp 초기설정
dp[1] = p[1]

# dp 채워넣기
for i in range(2, n + 1):
    
    # 최솟값 설정
    m = 10001

    # 최솟값의 후보자들을 조사하면서,
    for j in range(1, i + 1):

        # 최솟값을 찾으면,    
        if dp[i-j] + p[j] < m:
            
            # 최솟값 갱신
            m = dp[i-j] + p[j]
    
    # dp 값 추가
    dp[i] = m

# 출력
print(dp[-1])