코딩테스트/LeetCode

[Python][LeetCode] Climbing Stairs(계단오르기)

jungmin.park 2023. 11. 4. 19:33

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

문제설명:

정상에 도달하기 위해 n 계단을 올라가야 한다.

정상에 도달하기 위한 경로의 수

3일 때

1->1->1

1->2

2->1

 

피보나치 수열과 푸는 방법은 같지만 시간초과에 주의해야 한다.

 

class Solution:
    store = collections.defaultdict(int)

    def climbStairs(self, n: int) -> int:
        if n <= 2:
            return n

        if self.store[n]:
            return self.store[n]
        self.store[n] = self.climbStairs(n-1) + self.climbStairs(n-2)
        return self.store[n]

 

컬렉션을 사용 딕셔너리 값에 n이 재귀를 돌때마다 값을 저장시켜줄 것이다.

처음 재귀가 돌때는 5,4는 0을 가지고 있다.

가장 밑에서부터 1과 2는 반환 그럼 3은 3 3이 반환되면 4로 올라갔을때 4는 5 마지막으로 다시 5로 올라가면 8 n이 5일때 8가지 방법이 나온다.