백준 GOLD 5(합분해) - #2225
-
사용 언어 : javascript
-
해결 날짜 : 2023-02-08
-
해결 방법 :
- dp를 활용해 문제 해결
- N이 1인 경우 k개
- K가 1인 경우 1개 (N 하나)
- K가 2인 경우 N+1개
- K가 3인 경우
- N이 2인 경우 6개 (0+0+2, 2+0+0, 0+2+0, 1+1+0, 1+0+1, 0+1+1)
- N이 3인 경우 10개 (0+0+3, 0+3+0, 3+0+0, 2+1+0, 2+0+1, 1+2+0, 1+0+2, 0+1+2, 0+2+1, 1+1+1)
- 이를 통해 점화식 dp[i][j] = dp[i][j-1][i-1][j] (i >=2, j>=2) 도출
-
회고 :
- N, K로 dp 초기화하면 런타임 에러
-
코드
const fs = require('fs'); const filePath = process.platform === 'linux' ? '/dev/stdin' : '../input.txt'; const input = fs.readFileSync(filePath).toString().trim(); solution(input); function solution(props) { const [N, K] = props.split(' ').map((e) => +e); const dp = Array.from({ length: 201 }, () => Array(201).fill(0)); for (let i = 1; i <= 200; i++) { dp[1][i] = 1; dp[2][i] = i + 1; } for (let i = 2; i <= 200; i++) { dp[i][1] = i; for (let j = 2; j <= N; j++) { dp[i][j] = (dp[i][j - 1] + dp[i - 1][j]) % 1000000000; } } console.log(dp[K][N]); }
-
출처: 백준