728x90
반응형
https://www.acmicpc.net/problem/11057
11057번: 오르막 수
오르막 수는 수의 자리가 오름차순을 이루는 수를 말한다. 이때, 인접한 수가 같아도 오름차순으로 친다. 예를 들어, 2234와 3678, 11119는 오르막 수이지만, 2232, 3676, 91111은 오르막 수가 아니다. 수
www.acmicpc.net
문제 해결
n자리 수일 때 앞에서부터 n-1번째 수에 무슨 수가 오느냐에 따라 n자리에 올 수 있는 숫자의 개수가 달라짐
따라서 n번째 숫자에 i가 올 경우의 수를 dp[n][i]라 하면
$$dp[n][i] = \sum_{k=0}^i dp[n-1][k]$$
1자리 수일 때 i가 어느 수던간에 dp[n][i] = 1이므로
dp를 이용해서 쉽게 풀 수 있다.
CODE
import sys
input = sys.stdin.readline
n = int(input())
dp = [[0 for _ in range(10)] for _ in range(n+1)]
for i in range(10):
dp[1][i] = 1 # 한자리수는 0~9 각각 1개
for i in range(2,n+1):
for j in range(10):
dp[i][j] = (sum(dp[i-1][:j+1]))%10007
ans = (sum(dp[n][:]))%10007
print(ans)
728x90
반응형
'알고리즘 > [python] 백준 BOJ' 카테고리의 다른 글
[python] 백준 9456 스티커 (0) | 2022.12.27 |
---|---|
[python] 백준 17404 RGB거리2 (0) | 2022.12.26 |
[Python] 백준 1309 동물원 (0) | 2022.12.25 |
[Python] 백준 15998 1,2,3 더하기 3 (0) | 2022.12.25 |
[Python] 백준 1699 제곱수의 합 (0) | 2022.12.25 |
댓글