'''
문제: 계단이 n 계단 있을 때, 한 번에 1계단 또는 2계단씩 오를 수 있는 방법의 수를 구하라.
풀이: 다이나믹 프로그래밍을 이용하여 각 계단에 도달하는 방법의 수를 저장한다.
    n번째 계단에 도달하는 방법의 수는 (n-1)번째 계단과 (n-2)번째 계단에 도달하는 방법의 수의 합과 같다.
시간복잡도: O(n)
    각 계단에 도달하는 방법의 수를 한 번씩 계산하므로 전체 시간복잡도는 O(n)이다.
공간복잡도: O(n)
    다이나믹 프로그래밍을 위한 dp 배열이 n 크기를 가지므로 전체 공간복잡도는 O(n)이다.
사용한 자료구조: 리스트
'''

class Solution:
    def climbStairs(self, n: int) -> int:
        dp = [0 for i in range(n+1)]
        if n < 3:
            return n
        dp[1] = 1
        dp[2] = 2

        for i in range(3, n+1):
            dp[i] = dp[i-1]+dp[i-2]

        return dp[n]

