10844-s1 성공

This commit is contained in:
sm4640
2026-03-30 14:57:21 +09:00
parent 4e13009885
commit ae7df30365

View File

@@ -0,0 +1,44 @@
# 쉬운 계단 수
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 풀이를 확인하자.
"""