한 번에 1칸 또는 2칸을 오를 수 있을 때 n
칸의 계단을 오르는 경우의 수가 몇개인지 구하는 문제다.
n = 3 일 때
계단을 오를 수 있는 경우의 수는 3가지다.
직접 몇개의 계단에 대해 경우의 수를 구하다 보면 다음과 같은 규칙이 존재한다는 것을 쉽게 알아차릴 수 있을 것이다.
n
개의 계단을 오르는 방법은n-1
번째 계단을 오르고 한 칸 오르는 방법과 n-2
번째 계단을 오르고 두 칸 오르는 방법이 있다.
즉 n
칸의 계단을 오르는 경우의 수는 n-1
칸의 계단을 오르는 경우의 수와 n-2
칸의 계단을 오르는 경우의 수를 더한 것이 된다.
class Solution:
def climbStairs(self, n: int) -> int:
first, second = 1, 1
curr = 1
for i in range(n-1):
curr = first + second
first = second
second = curr
return curr
앞서 작성한 코드를 봤을 때 직관적으로 규칙을 이해하기 어렵다고 생각되어 메모이제이션 기법으로도 풀어보았다.
class Solution:
def climbStairs(self, n: int) -> int:
memo = [1, 1]
for i in range(2, n+1):
memo.append(memo[i-2] + memo[i-1])
return memo[n]