본문 바로가기
Tech/Coding

10844번 쉬운 계단 수

by redcubes 2024. 3. 3.

동적 계획법(Dynamic Programming)을 사용해서 문제를 해결해 보자.

길이가 n이고 마지막 숫자가 0에서 9까지 각각인 계단 수의 개수를 dp[n][last]라고 할 때, 

  • (dp[1][0] = 0) (길이가 1이고 마지막 숫자가 0인 계단 수는 없다.)
  • (dp[1][i] = 1) (1<= i <= 9), 길이가 1이고 마지막 숫자가 (i)인 계단 수는 1개
  • (dp[n][0] = dp[n-1][1])
  • (dp[n][9] = dp[n-1][8])
  • (dp[n][i] = dp[n-1][i-1] + dp[n-1][i+1]) ((1 <= i <= 8))
  • (dp[n][0])에서 (dp[n][9])까지의 합하면(sum(dp[n]) 답이 된다
n = int(input())
dp = [[0] * 10 for _ in range(n+1)]

for i in range(1, 10):
    dp[1][i] = 1

for i in range(2, n+1):
    for j in range(10):
        if j == 0:
            dp[i][j] = dp[i-1][1]
        elif j == 9:
            dp[i][j] = dp[i-1][8]
        else:
            dp[i][j] = dp[i-1][j+1] + dp[i-1][j-1]

print(sum(dp[-1])%(10**9))

'Tech > Coding' 카테고리의 다른 글

🐨그리디 알고리즘  (3) 2024.03.19
C언어 기본] 01 프로그램 만들기  (0) 2024.03.04
나의 방학  (0) 2024.03.02
가장 가까운 두 점  (0) 2024.03.02
가장 긴 바이토닉 부분 수열  (0) 2024.03.02