본문 바로가기
Sketch (Programming Language)/Python

Baekjoon Training #10844

by 생각하는 이상훈 2023. 2. 2.
728x90

 


#10844 쉬운 계단 수


import sys
input = sys.stdin.readline

n = int(input())

dp = [[0] * 10 for _ in range(n + 1)]

# 1부터 9까지의 수로 첫번째 배열을 채움
for i in range(1,10):
    dp[1][i] = 1

# dp[n자리 수][n자리 숫자일 때 해당 index 앞에 올 수 있는 일의 자리 수]
# 2 자리수부터 시작
for i in range(2, n+1):
    for j in range(10): # index기반으로 전부 조사
        # 뒷자리가 0일 때는 이전에 한가지 경우의 합으로 구함
        if j == 0 : dp[i][j] = dp[i-1][j+1]
        # 뒷자리가 9일 때는 이전에 한가지 경우의 합으로 구함
        elif j == 9 : dp[i][j] = dp[i-1][j-1]
        # 뒷자리가 2~8일 때는 이전에 두가지 경우의 합으로 구함
        else : dp[i][j] = dp[i-1][j-1] + dp[i-1][j+1]

# overflow를 막기 위해 문제에서 요구한대로 1000000000으로 나눈 나머지를 출력
print(sum(dp[n]) % 1000000000)

2차원 배열을 이용한다는 발상을 하는 것이 중요했다. dp[a][b]꼴로 초기화를 해두고 '[a]는 자리수, [b]는 마지막 자리의 값' 방식으로 2차원 배열을 만들고 값을 계속해서 더해나가는 방식으로 문제를 해결하였다.


 

728x90

'Sketch (Programming Language) > Python' 카테고리의 다른 글

식단 평가 프로그램 (Back-end 연결을 중심으로)  (0) 2023.02.08
Baekjoon Training #1193  (0) 2023.02.04
Baekjoon Training #2579  (0) 2023.01.31
Baekjoon Training #9461  (2) 2023.01.29
Baekjoon Training #1446  (0) 2023.01.27