You are climbing a stair case. It takes n steps to reach to the top.
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
계단을 1 혹은 2개씩 오를 수 있을 때 목표지점까지 도달할 수 있는 방법?
Example 1:
Input: 2 Output: 2 Explanation: There are two ways to climb to the top. 1. 1 step + 1 step 2. 2 steps
Example 2:
Input: 3 Output: 3 Explanation: There are three ways to climb to the top. 1. 1 step + 1 step + 1 step 2. 1 step + 2 steps 3. 2 steps + 1 step
Constraints:
- 1 <= n <= 45
문제 풀이
- dp 사용
-난이도: 쉬움
- 계단을 1칸 또는 2칸을 오를 수 있으므로
dp[n]은 dp[n-1]*1 과 dp[n-2]*2 (1을 두번 더함, 2를 한 번 더 함) 로 나타낼 수 있다.
이 때 1을 두 번 더하는 것은 dp[n-1] * 1에 포함되므로 고려하지 않는다.
따라서 dp[n]= dp[n-1] + dp[n-2]가 된다.
class Solution {
public:
int climbStairs(int n) {
int dp[46] = {0,};
dp[1] = 1;
dp[2] = 2;
for(int i=3; i<=n; i++){
dp[i] = dp[i-1] + dp[i-2];
}
return dp[n];
}
};
'알고리즘 문제풀이 > leetcode' 카테고리의 다른 글
[leetcode 96] Unique Binary Search Trees (0) | 2020.10.26 |
---|---|
[leetcode 139] Word Break (0) | 2020.10.26 |
[leetcode 152] Maximum Product Subarray (0) | 2020.10.26 |
[leetcode 198] House Robber (0) | 2020.10.25 |
[leetcode 39] Combination Sum (0) | 2020.10.25 |
댓글