본문 바로가기
알고리즘/[python] 백준 BOJ

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

by Alan_Kim 2023. 3. 18.
728x90
반응형

https://www.acmicpc.net/problem/16194

 

16194번: 카드 구매하기 2

첫째 줄에 민규가 구매하려고 하는 카드의 개수 N이 주어진다. (1 ≤ N ≤ 1,000) 둘째 줄에는 Pi가 P1부터 PN까지 순서대로 주어진다. (1 ≤ Pi ≤ 10,000)

www.acmicpc.net

 

문제 해결

  • i개를 사는 방법의 수는 매우 많다.
  • 하지만 i개를 사는 방법의 가지수는 (1개 사는 방법+i-1개 사는방법) + (2개 사는 방법 + i-2개 사는 방법).... + i개 통째로 사는 방법으로 나타낼 수 있다.
  • dp[i]를 i개 사는 최소 비용이라 하자.
  • dp[i] = dp[i-j] + P[j]로 나타낼 수 있다. (j=1,2,3,4,...i) P[j]는 j개를 묶음으로 살 때 비용

 

CODE

import sys
input = sys.stdin.readline

n = int(input())
P = [0] + list(map(int, input().split()))
dp = [0 for _ in range(n+1)] # dp[i]는 i개의 카드를 살수 있는 최소 비용
for i in range(1,n+1):
    for j in range(1,i+1):
        if dp[i] == 0:
            dp[i] = dp[i-j] + P[j]
        else:
            dp[i] = min(dp[i], dp[i-j]+P[j])
print(dp[n])
728x90
반응형

'알고리즘 > [python] 백준 BOJ' 카테고리의 다른 글

[python] 백준 18310 안테나  (0) 2023.03.18
[python] 백준 10026 적록색약  (0) 2023.03.18
[python] 백준 9625 BABBA  (0) 2023.03.17
[python] 백준 10775 공항  (0) 2023.03.17
[python] 백준 2810 컵홀더  (0) 2023.03.17

댓글