Coding Test/Python
[백준/DP] 11057번: 오르막 수 (실버1, python)
lim.dev
2024. 2. 1. 14:27
https://www.acmicpc.net/problem/11057
11057번: 오르막 수
오르막 수는 수의 자리가 오름차순을 이루는 수를 말한다. 이때, 인접한 수가 같아도 오름차순으로 친다. 예를 들어, 2234와 3678, 11119는 오르막 수이지만, 2232, 3676, 91111은 오르막 수가 아니다. 수
www.acmicpc.net
아이디어
DP문제였다.. 규칙을 못 찾아서 검색했다 ㅠㅠ..
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | total | |
N = 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 10 |
N = 2 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 55 |
N = 3 | 1 | 3 | 6 | 10 | 15 | 21 | 28 | 36 | 45 | 55 | 220 |
행은 길이가 N일 때
열은 해당 숫자로 끝나는 경우의 수이다.
이 표에서 찾을 수 있는 규칙은 다음과 같다.
[i][j] = [i-1][j] + [i][j-1]
* 0일때 경우의 수는 계속 1개니까 (0, 00, 000, 0000...) 점화식을 사용해도 문제가 없다.
전체 코드
N = int(input())
dp = [1] * 10
for _ in range(1, N):
for j in range(1, 10):
dp[j] += dp[j-1]
print(sum(dp) % 10007)
찾은 점화식은 [i][j] = [i-1][j] + [i][j-1]인데 코드 상에서 dp[j] += dp[j-1]인 이유는 2차원 배열로 구하지 않고 i-1의 배열에서 바로 값을 구하기 때문이다. (i-1의 배열의 원래 값에 j-1을 더하기 때문에 [i-1][j] + [i][j-1]이 된다. )