한 번에 1칸 또는 2칸만 오를 수 있다.
따라서, memo[i]
(i
번째 칸을 오를 수 있는 방법의 수) 는 memo[i-1]
(i-1
번째 칸까지 올라올 수 있는 경우의 수) + memo[i-2]
(i-2
번째 칸까지 올라올 수 있는 경우의 수) 이다.
- i-1
번째에서 1칸을 오르거나 i-2
번째 칸에서 2칸을 올라올 수 있다.
전형적인 DP 문제로 풀 수 있다.
def solution(n):
if n == 1:
return 1
memo = [0] * n
memo[0] = 1
memo[1] = 2
for i in range(2, n):
memo[i] = (memo[i-1] + memo[i-2]) % 1234567
return memo[n-1]
fun solution(n: Int): Long {
if (n == 1) return 1
val memo = LongArray(n)
memo[0] = 1L
memo[1] = 2L
for (i in 2 until n) {
memo[i] = (memo[i-1] + memo[i-2]) % 1234567
}
return memo[n-1]
}
n
이 1인 경우에 대한 예외처리