백준의 주어진 상자로 새로운 상자 만들기와 비슷한 문제다. 여기서는 계단을 오른다고 나와 있지만, 간단하게 말해서 1과 2로 주어진 n을 만드는 갯수를 구하는 거다.
지금까지 해왔던 대로 DP를 이용해서 풀면 된다.
1과 2로 1을 만드는 경우의 수는 1이다. 1과 2로 2를 만드는 경우의 수는 '1+1', '2'로 2이다. 1과 2로 3을 만드는 경우의 수는? '(1+1)+1', (2)+1', '(1)+2'이렇게 3이다. 4라면 '(1+1+1)+1', '(2+1)+1', '(1+2)+1', '(1+1)+2', '(2)+2'로 5이다.
앞서 봤듯이 1과 2로 만들 수 있는 n의 경우의 수는 n-1의 경우의 수 더하기 n-2의 경우의 수이다.
class Solution {
public int climbStairs(int n) {
int[] DP = new int[46];
DP[1] = 1;
DP[2] = 2;
for(int i=3; i<= n; i++){
DP[i] = DP[i-1] + DP[i-2];
}
return DP[n];
}
}