https://www.acmicpc.net/problem/2591
1. 카드는 1부터 34까지 있으므로 dp[숫자의길이][34]로 만들어준다.
2. 전의수 * 10 + 현재수 <= 34 성립하면 dp를 더해준다. (ex 4 3 2 + 4 = 4 3 24)
3. 전의수에 현재수를 그대로 붙여 현재수에 더해준다.(ex 4 3 2 + 4 = 4 3 2 4)
4. 마지막이 0으로 끝나면 안되므로 0을제외한 합을 구해준다.
n = list(map(int, input().strip()))
dp = [[0 for _ in range(35)] for _ in range(len(n))]
dp[0][n[0]] = 1
for i in range(1, len(n)):
for j in range(1, 35):
next = 10 * j + n[i]
if next <= 34:
dp[i][next] += dp[i-1][j]
dp[i][n[i]] += dp[i-1][j]
print(sum(dp[-1][1:]))
'알고리즘 > BOJ' 카테고리의 다른 글
[Python] 백준 2306번: 유전자 (0) | 2021.11.24 |
---|---|
[Python] 백준 13325번: 이진 트리 (0) | 2021.11.23 |
[Python] 백준 2643번: 색종이 올려 놓기 (0) | 2021.11.21 |
[Python] 백준 12869번: 뮤탈리스크 (0) | 2021.11.19 |
[Python] 백준 1563번: 개근상 (0) | 2021.11.19 |
댓글