백준 SILVER 5(다리 놓기)
-
사용 언어 : javascript
-
해결 날짜 : 2023-01-28
-
해결 방법 :
- dp를 활용해 문제 해결
- 각 다리를 놓는 경우를 확인하는데 최대 30 x 30
- n = 1, m = n부터 시작해 최대 N, M까지 각 dp를 업데이트
- n === m인 경우 놓을 수 있는 다리 수는 1개
- n === 1인 경우 놓을 수 있는 다리 수는 m개
- 그 외의 경우 이전 dp 값들의 누적 합
-
회고 :
- x
-
코드
const fs = require('fs'); const filePath = process.platform === 'linux' ? '/dev/stdin' : '../input.txt'; let input = fs.readFileSync(filePath).toString().trim(); solution(input); function solution(props) { props = props.split('\n').slice(1); props.forEach((prop) => { const [N, M] = prop.split(' ').map((e) => +e); const dp = Array.from({ length: 30 }, () => Array(30).fill(0)); for (let n = 1; n <= N; n++) { for (let m = n; m <= M; m++) { if (n === m) { dp[n][m] = 1; } else if (n === 1) { dp[n][m] = m; } else { for (let i = 1; i < m; i++) { dp[n][m] += dp[n - 1][i]; } } } } console.log(dp[N][M]); }); }
-
출처: 백준