44 lines
1.3 KiB
Python
44 lines
1.3 KiB
Python
# 쉬운 계단 수
|
|
|
|
import sys
|
|
|
|
input = sys.stdin.readline
|
|
|
|
def solution():
|
|
n = int(input().rstrip())
|
|
MOD = 1000000000
|
|
|
|
dp = [[1]*10 for _ in range(n)]
|
|
dp[0][0] = 0
|
|
|
|
for i in range(1, n):
|
|
for j in range(10):
|
|
if i == 1 and j == 1:
|
|
dp[i][j] = dp[i-1][j+1]
|
|
continue
|
|
if j == 0:
|
|
dp[i][j] = dp[i-1][j+1]
|
|
elif j == 9:
|
|
dp[i][j] = dp[i-1][j-1]
|
|
else:
|
|
dp[i][j] = (dp[i-1][j-1] + dp[i-1][j+1])%MOD
|
|
|
|
print(sum(dp[n-1])%MOD)
|
|
|
|
return
|
|
|
|
|
|
solution()
|
|
|
|
"""
|
|
걸린 시간: 25분
|
|
|
|
시간 복잡도: n*10 칸을 채워야하기 때문에 O(10n)이다.
|
|
|
|
해설: dp[i][j]는 i번째 자리수가 j로 끝날때 경우의 수이다.
|
|
이전 행의 앞뒤에서만 올 수 있으므로, dp[i][j] = dp[i-1][j-1] + dp[i-1][j+1]이다.
|
|
0과 9는 각각 오른쪽과 왼쪽에서만 올 수 있고, 두번째 행에서 1은 0으로 시작할 수 없기 때문에 오른쪽에서만 와야한다.
|
|
위 조건 그대로 코드로 구현한 뒤 mod로 나머지들만 계속 업데이트해가면 된다.
|
|
마지막 수는 어떤 숫자든 가능하기 때문에 마지막 행의 모든 값을 더한 후 mod해서 답을 구한다.
|
|
mod 공식은 1904 풀이를 확인하자.
|
|
""" |