알고리즘/LeetCode

[LeetCode] Climbing Stairs

벨에삐 2023. 3. 7. 14:47

https://leetcode.com/problems/climbing-stairs/description/

 

Climbing Stairs - LeetCode

Can you solve this real interview question? Climbing Stairs - You are climbing a staircase. It takes n steps to reach the top. Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?   Example 1: Input: n = 2 Outpu

leetcode.com

 

난이도 Easy로 상당히 쉬운 문제입니다.

 

class Solution {
public:
    int dp[46];
    int climbStairs(int n) {
        dp[0] = 1; dp[1] = 1;
        for(int i = 2; i <= n; ++i){
            dp[i] = dp[i-1] + dp[i-2];
        }
        return dp[n];
    }
};

1) table 정의

dp[i] : 높이 0에서 시작하여 높이 i인 top에 도달할 수 있는 방법의 수

 

2) 점화식 찾기

dp[i] = dp[i-1] + dp[i-2];

높이 i에 도달하는 방법의  수 = 높이 i-1에서 1step 올라가는 방법의 수 + 높이 i-2에서 2step 올라가는 방법의 수

 

3) 초기값 설정

dp[0] = 1; dp[1] = 1;

 

시간복잡도 공간복잡도 모두 O(n)입니다. 

 

이 문제에서는 공간복잡도 O(n)의 배열을 사용하지 않아도 다음과 같이 구현하면 공간복잡도 O(1)에 해결이 가능합니다. 다만, 시간복잡도는 동일하게 O(n)입니다.

class Solution {
public:
    int climbStairs(int n) {
        int a = 1, b = 1, tmp;
        for(int i = 2; i <= n; ++i){
            tmp = b;
            b += a;
            a = tmp;
        }
        return b;
    }
};

 

 

'알고리즘 > LeetCode' 카테고리의 다른 글

[LeetCode] Kth Missing Positive Number  (0) 2023.03.07
[LeetCode] Binary Search  (0) 2023.03.06
[LeetCode] Longest Increasing Subsequence  (0) 2023.03.06
[LeetCode] Two Sum  (0) 2023.03.06
LeetCode Plan  (0) 2023.03.06