import sys
input = sys.stdin.readline
mod_num = 10_007
def BOJ11057() :
n = int(input())
dp = [[0 for _ in range(10)] for _ in range(n+1)]
dp[1] = [1 for _ in range(10)]
for i in range(2, n+1) :
for j in range(10) :
dp[i][j] = sum(dp[i-1][:j+1]) % mod_num
print(sum(dp[n]) % mod_num)
BOJ11057()
접근 방법 :
1. dp는 끝자리가 i 인 숫자의 개수를 나타내는 배열이다.
2. 끝자리 i를 만들수 있는 숫자는 dp[n-1]의 끝자리 i 까지의 숫자들의 합이다.
1자리 수 만들수 있는 2자리 수 끝자리 0 은 00
1자리 수 만들수 있는 2자리 수 끝자리 1 은 01, 11
1자리 수 만들수 있는 2자리 수 끝자리 2 은 02, 12, 22
1자리 수 만들수 있는 2자리 수 끝자리 3 은 03, 13, 23, 33
~~~
1자리 수 만들수 있는 2자리 수 끝자리 9 은 09, 19, 29, 39, 49, 59, 69, 79, 89, 99
이전 인덱스의 자신보다 같거나 작은 숫자들에서 만들수 있으므로 그들의 합을 더해주면 된다.
https://www.acmicpc.net/problem/11057
11057번: 오르막 수
오르막 수는 수의 자리가 오름차순을 이루는 수를 말한다. 이때, 인접한 수가 같아도 오름차순으로 친다. 예를 들어, 2234와 3678, 11119는 오르막 수이지만, 2232, 3676, 91111은 오르막 수가 아니다. 수
www.acmicpc.net
'알고리즘' 카테고리의 다른 글
가장 긴 감소하는 부분 수열 [백준 11722] - python (0) | 2022.03.13 |
---|---|
제곱수의 합 [백준 1699] - python (0) | 2022.03.12 |
퇴사 [백준 14501] - python (0) | 2022.03.10 |
2xn 타일링 2 [백준 11727] - python (0) | 2022.03.09 |
이친수 [백준 2193] - python (0) | 2022.03.08 |