https://www.acmicpc.net/problem/2011
임의의 문자열을 다음의 규칙으로 암호화 한다.
이렇게 암호화 할 경우 복호화할때의 경우의 수가 많아진다.
예를 들어 "BEAN"을 25114로 암호화 한 후, 원래 글자로 변경할 때
"BEAAD", "YAAD", "YAN", "YKD", "BEKD", "BEAN" 6가지 경우의 수가 나온다.
어떤 암호가 주어졌을 때, 해석이 몇 가지 나올 수 있는지 구한다.
crp = input()
dp = [1] * (len(crp)+1) # idx : idx갯수만큼 숫자를 사용할 때, 만들 수 있는 암호문자 갯수
prev = '3'
for i, c in enumerate(crp):
tmp = prev + c
if int(tmp) < 27: # 2자리 조합이 알파벳 범위안에 들어온다면.
if tmp == '10' or tmp == '20':
dp[i] = 0
dp[i+1] = dp[i-1] + dp[i]
else:
dp[i+1] = dp[i]
# 0이 입력됬을경우
if c == '0':
# 암호가 잘못되었을 경우
if prev == '0': # CASE 1. 00
dp[-1] = 0
break
if int(prev) >= 3: # CASE 2. 두 숫자의 조합이 30이상될 경우
dp[-1] = 0
break
prev = c
print(dp[-1]%1000000)