For Programmer
백준 11057번 파이썬 문제풀이(DP - 오름막 수) 본문
728x90
이 문제는
의 문제와 굉장히 유사하다.
dp[ N 자리의 수 ][ N 자리 숫자에서 맨 앞에 오는 수 ]
라고 생각해보자.
dp[1][0] ~ dp[1][9] = 1 이다.
N이 2부터는 다음과 같은 식이 성립한다.
dp[2][0] = dp[1][0] + dp[1][1] ... dp[1][9] 이다.
dp[2][1] = dp[1][1] + dp[1][2] ... dp[1][9] 이다.
dp[2][2] = dp[1][2] + ... dp[1][9] 이다.
즉 앞자리에 0이 올때는 뒷자리에 0~9이 모두 올 수 있기 때문에 0~9가 오는경우의 수를 모두 더해주면되고 1이 올때는 뒷자리에서 1~9 오는 경우의 수를 모두 더해주면 된다. 이를 점화식으로 표현하면 다음과 같은 식이 나온다.
import sys
input = sys.stdin.readline
N = int(input())
dp = [[1 for _ in range(10)] for _ in range(N + 1)]
for i in range(2, N + 1):
for j in range(10):
dp[i][j] = sum(dp[i-1][j:])
print(sum(dp[N]) % 10007)
728x90
'코팅테스트 > 백준 문제 모음' 카테고리의 다른 글
백준 1932번 파이썬 문제풀이(DP - 정수 삼각형) (0) | 2021.11.08 |
---|---|
백준 2156번 파이썬 문제풀이(DP - 포도주 시식) - 자세한 설명 (0) | 2021.11.07 |
백준 1309번 파이썬 문제풀이(DP - 동물원) (0) | 2021.11.06 |
백준 1149번 파이썬 문제풀이(DP - RGB거리) (0) | 2021.11.06 |
백준 2225번 파이썬 문제풀이(DP - 합분해) (0) | 2021.11.05 |
Comments