728x90
해당 문제는 다이나믹 프로그래밍 문제로 해결하였습니다.
N이 5이고 K가 3일때 구하는 아래의 그림과 같이 표현하였습니다.
첫번째는 모두 한가지 이고,
두번째 부터는 숫자 N일때 이전에 있던 0부터 N까지의 경우의 수를 모두 더한 값과 같다.
예를들어 두번째에 3의 숫자의 경우의 수를 구한다고 한다면
- 0+3 → 1
- 1+2 → 1
- 2+1 → 1
- 3+0 → 1
총 4가지가 된다. 즉 이전에 있던 경우의수를 0부터 N까지 모두 더한값과 같다.
위의 내용을 코드로 정리하면 아래와 같다.
N , K = map(int, input().split())
dp = [[1 for _ in range(N+1) ] for _ in range(K)]
for i in range(1, K):
for j in range(len(dp[i])):
dp[i][j] = 0
for k in range(j+1):
dp[i][j] += dp[i-1][k]
dp[i][j] = dp[i][j] % 1000000000
print(dp[K-1][N] % 1000000000)
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 11049번 : 행렬곱셈순서 (0) | 2023.10.17 |
---|---|
[백준] 1915번 : 가장 큰 정사각형 (1) | 2023.10.17 |
[백준] 2096번 : 내려가기 (0) | 2023.10.17 |
[백준] 2565번 : 전기줄 (0) | 2023.10.17 |
[백준] 17471번 : 게리맨더링 (0) | 2023.10.17 |