따라서 동적 계획법은 계산 횟수를 줄일 수 있다. 하위 문제의 수가 기하급수적으로 증가할 때 유용함
https://www.acmicpc.net/problem/9095
부르투포스를 DP로 착각했음.
내가 쓴건 재귀함수를 이용한 top-down 방식이 아니라, 그냥 부르투포스임
let memo = new Array(11).fill(-1);
memo[1] = 1;
memo[2] = 2;
memo[3] = 4;
function dp(num) {
if (num === 1) return memo[1];
if (num === 2) return memo[2];
if (num === 3) return memo[3];
if (memo[num] != -1) {
return memo[num];
}
memo[num] = dp(num - 1) + dp(num - 2) + dp(num - 3);
return memo[num];
}
dp(10);
for (let i = 0; i < testCase.length; ++i) {
console.log(memo[testCase[i]]);
}
f(n-1)+f(n-2)+f(n-3)
이라는 것을 알 수 있음let dp = new Array(11);
dp[0] = 1;
dp[1] = 2;
dp[2] = 4;
for (let i = 3; i < 11; ++i) {
dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3];
}
for (let i = 0; i < testCase.length; ++i) {
console.log(dp[testCase[i] - 1]);
}
dp[i] = [i+1]의 경우의 수
dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3]
let dp = new Array(11);
dp[0] = 1;
dp[1] = 2;
dp[2] = 4;
for (let i = 3; i < 11; ++i) {
dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3];
console.log(`dp[${i}]: ${dp[i]}`)
}
for (let i = 0; i < testCase.length; ++i) {
console.log(dp[testCase[i] - 1]);
}
console 값을 찍어보면 아래와 같다
dp[3]: 7
dp[4]: 13
dp[5]: 24
dp[6]: 44
dp[7]: 81
dp[8]: 149
dp[9]: 274
dp[10]: 504