백준 SILVER 1(떡 먹는 호랑이) - #2502
-
사용 언어 : javascript
-
해결 날짜 : 2023-02-10
-
해결 방법 :
- dp를 활용해 문제 해결
- dp[n] = dp[n-1] + dp[n-2]
- dp[0], dp[1]을 1로 초기화하고 적합한 A,B를 찾을 때까지 반복
- 각 반복 별 dp의 마지막 값이 주어진 K와 같은 경우 정답
- K보다 큰 경우 dp 초기화 후 다시 반복 (dp[0]을 1 증가, dp[1] = dp[0])
- K보다 작은 경우 dp[1]만 1 증가
-
회고 :
- 테스트 케이스 값과 동일하지 않아 계속 살펴봤는데 답이 여러개일 때 하나만 반환하면 되는거였다;; 문제 끝까지 잘 읽기
-
코드
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 [D, K] = props.split(' ').map((prop) => +prop); const dp = Array(D).fill(0); dp[0] = dp[1] = 1; while (true) { for (let i = 2; i < D; i++) { dp[i] = dp[i - 1] + dp[i - 2]; } if (dp[D - 1] === K) { console.log(`${dp[0]}\n${dp[1]}`); break; } if (dp[D - 1] > K) { dp[0] += 1; dp[1] = dp[0]; } else { dp[1] += 1; } } }
-
출처: 백준