Home 쉬운 계단 수 백준 10844번 DP
Post
Cancel

쉬운 계단 수 백준 10844번 DP

https://www.acmicpc.net/problem/10844

문제 45656이란 수를 보자.

이 수는 인접한 모든 자리의 차이가 1이다. 이런 수를 계단 수라고 한다.

N이 주어질 때, 길이가 N인 계단 수가 총 몇 개 있는지 구해보자. 0으로 시작하는 수는 계단수가 아니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
mod = 1000000000
num = int(input())
dp = [[0]*10 for _ in range(101)]

for i in range(1,10):
    dp[1][i] = 1
    
for i in range(2, num+1):
    for k in range(10):
        if k!=0:
            dp[i][k] += dp[i-1][k-1]
        if k!=9:
            dp[i][k] += dp[i-1][k+1]
        dp[i][k]%=mod
        
ans = 0
for i in range(10):
    ans += dp[num][i]
ans%=mod
print(ans)

1부터 100까지 경우의 수를 DP로 계산하는 문제입니다.

result img

첫째자리의 경우 0은 단독으로 오지 못합니다. 그러니 1부터 9까지 총 9개의 경우의 수가 있습니다.

두번째의 경우 0은 ‘01’은 쓸 수 없고 ‘10’만 가능하기에 한가지가됩니다. 반면 나머지는 12,21등 두가지를 쓸 수 있네요

그리고 세번째의 경우 101은 가능하지만 010은 안되니 0번의 경우 1개이고 1의 경우 123,121,101 총 3가지의 경우의 수를 확인할 수 있고 이렇게 로직따라서 더해나가고 마지막에는 모두 더하면 됩니다.

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.