본문 바로가기
알고리즘 문제풀이/leetcode

[leetcode 70] Climbing Stairs

by m2162003 2020. 10. 26.

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

댓글