티스토리 뷰

728x90
반응형

백준 10844번 쉬운 계단 수

백준 10844번 쉬운 계단 수

설명

단순히 점화식을 찾으려고 하면 너무 복잡해진다. 2차원 배열에서의 점화 관계를 사용한다.

example

위 행렬을 A라고 할 때, A[i][j]는 j로 끝나는 i자리수의 계단의 수이다. 1자리수는 1~9까지 올 수 있으므로 그대로 dp를 채울 수 있고, 2자리수 부터는 0은 전자리수의 1인 경우와 9는 전자리수의 8일 경우이고 나머지는 전자리수의 하나적고 많은 경우의 합이다. 즉 점화식을 dp 배열로 표현하게되면 밑의 코드라고 볼 수 있다.

dp[i][0] = dp[i-1][1]
dp[i][j] = dp[i-1][j-1] + dp[i-1][j+1]
dp[i][9] = dp[i-1][8]



코드

import sys
input = sys.stdin.readline 


class Solution:
    def easy_stair_numbers(self, N: int):
        # dp 초기화. 행이 자리수, 열이 0부터 9까지 가능한 개수
        dp = [[0,0,0,0,0,0,0,0,0,0] for _ in range(101)]

        # dp 처음 1 [0,1,1,1,1,1,1,1,1,1]로 초기화
        for i in range(1, 10):
            dp[1][i] = 1

        """2번째 부터 0일 수 있는 경우의 수는 
        전 자리수에서 1인 경우이고, 
        9인 경우의 수는 전 자리수에서 8인 경우의수임"""
        for i in range(2, N+1):
            dp[i][0] = dp[i-1][1]
            dp[i][9] = dp[i-1][8]

            """1부터 8은 전 자리수에서 
            n-1, n+1인 경우의 합과 같음"""
            for j in range(1, 9):
                dp[i][j] = dp[i-1][j-1] + dp[i-1][j+1]            
        return sum(dp[N])%1000000000


print(Solution().easy_stair_numbers(int(input())))
728x90
반응형
댓글
반응형
250x250
글 보관함
최근에 달린 댓글
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Total
Today
Yesterday
링크