반응형
문제 : https://www.acmicpc.net/problem/2293
정답 코드
import sys
def solve():
for coin in arr:
for j in range(coin, K+1):
dp[j] += dp[j-coin]
print(dp[K])
return
if __name__=="__main__":
input = sys.stdin.readline
N, K = map(int, input().split())
arr = [int(input()) for i in range(N)]
# dp[1]는 1개만 골랐을 때 경우의 수
# dp[0]은 하나의 동전만으로 k원 만드는 경우의 수를 의미 = 1
dp = [1] + [0]*K
solve()
결과 및 정리
전형적인 DP 문제
메모리가 4MB라 1차원 배열까지만 DP를 선언해서 해결해야합니다.
dp[i]는 dp[i] + dp[i - coin] 으로 점화식을 나타낼 수 있는데
예를 들어 dp[2] = dp[2] + dp[0] 로 나타낼 수 있습니다.
이는 dp[2] = 1원으로 만든 2원을 의미하며 dp[0] = 2원 1개로 만든 경우의 수로 이는 1+1, 2의 경우를 나타냅니다
반응형
'ProblemSolving > DP' 카테고리의 다른 글
프로그래머스 등굣길 (파이썬) (0) | 2022.05.12 |
---|---|
프로그래머스 N으로 표현 (파이썬) (0) | 2022.05.12 |
백준 2038 골룽 수열 (파이썬) (0) | 2022.05.09 |
백준 2225 합분해 (파이썬) (0) | 2022.05.08 |
백준 12865 평범한 배낭 (파이썬) (0) | 2022.05.04 |