n번째까지 도달하는 경우의 수 구하기.
먼저, 몇가지 예시를 적어 input n에 따른 output이 나오는 규칙을 도출해보자.
n = 2일 때,
1) 1 + 1
2) 2
n = 3일 때,
1) 1 + 1 + 1
2) 1 + 2
3) 2 + 1
n = 4일 때,
1) 1 + 1 + 1 + 1
2) 1 + 1 + 2
3) 1 + 2 + 1
4) 2 + 1 + 1
5) 2 + 2
n = 5일 때,
1) 1 + 1 + 1+ 1 + 1
2) 1 + 1 + 1 + 2
3) 1 + 1+ 2 + 1
4) 1 + 2 + 1 + 1
5) 2 + 1 + 1 + 1
6) 1 + 2 + 2
7) 2 + 1 + 2
8) 2 + 2 + 1
경우의 수만 나열해보면
2 3 5 8 13 ···, n번째 순서의 점화식의 규칙은 n=(n-1)+(n-2)가 됨을 확인할 수 있다.
13 = 8 + 5
8 = 5 + 3
5 = 3 + 2
즉, 구하려는 값은 왼쪽의 두 값을 더하면 된다.
var climbStairs = function(n) {
let dp = []
dp[1] = 1;
dp[2] = 2;
for(let i = 3; i <= n; i++){
// i = 3일 때 dp[3] = dp[2] + dp[1] => 3
// i = 4일 때, dp[4] = dp[3] + dp[2] => 5
// i = 5일 때, dp[5] = dp[4] + dp[3] => 8
// i = 6일 때, dp[6] = 8 + 5 => 13
dp[i] = dp[i-1] + dp[i-2]
}
return dp[n]
};