반응형
-풀이
N, K = map(int, input().split())
dp = [[0] * (N+1) for _ in range(K+1)]
dp[0][0] = 1
for i in range(1, K+1):
for j in range(N+1):
dp[i][j] = dp[i-1][j] + dp[i][j-1]
dp[i][j] %= 1000000000
print(dp[K][N])
-풀이 설명
[30분 no sol] 그리면서까지 규칙을 찾아보려 했지만 찾지 못하였다. 구글링을 해보니 0부터 N까지의 정수를 K개를 이용하여 N을 만드는 방법은 0부터 N개까지 k-1을 만드는 개수의 합과 같다.
이를 통해 보았을 때 n=2, k=3 은 (n=0,k=2), (n=1,k=2), (n=2,k=2) 의 합과 같다고 볼 수 있다. 이러한 방식으로 나타내면 O(K*N^2)이지만 풀이 코드와 같이 DP[K][n-1] = DP[K-1][0]+DP[K-1][1]]+…+DP[K-1][n-1] 성질을 이용하여 O(KN) 으로 나타낼 수 있다.
'알고리즘' 카테고리의 다른 글
[DP] 백준 11052 파이썬 (카드 구매하기) 실버1 (0) | 2021.11.16 |
---|---|
[DP] 백준 2011 파이썬 (암호코드) 실버1 (0) | 2021.11.16 |
[구현] 백준 1100 파이썬 (하얀 칸) 브론즈2 (0) | 2021.11.16 |
[수학] 백준 1075 파이썬 (나누기) 브론즈2 (0) | 2021.11.15 |
[DP] 백준 9461 파이썬 (파도반 수열) 실버3 (0) | 2021.11.15 |