map_lst = list(map(int, input()))
length = len(map_lst)
dp = [0] * length
if length == 0:
print(0)
else:
for i in range(length):
if i == 0:
if 1 <= map_lst[0] < 10: # 맨 앞 숫자 보고 0 또는 1
dp[0] = 1
else:
break
elif i == 1: # 1번째 숫자 정하기
if map_lst[i] == 0:
if 10 <= map_lst[i - 1] * 10 + map_lst[i] <= 20:
dp[i] = 1
else:
dp[i] = 0
dp[i - 1] = 0
elif 10 < map_lst[i - 1] * 10 + map_lst[i] <= 26:
dp[i] = 2
else:
dp[i] = 1
elif map_lst[i - 1] * 10 + map_lst[i] == 0: # 00 인 경우
dp[i - 1] = 0
dp[i] = 0
# 예외 아닌 경우 상시 적용
elif map_lst[i] == 0:
if map_lst[i - 1] * 10 + map_lst[i] <= 20:
dp[i] = dp[i - 2]
else:
dp[i] = 0
dp[i - 1] = 0
elif 10 < map_lst[i - 1] * 10 + map_lst[i] <= 26:
dp[i] = dp[i - 2] + dp[i - 1]
else:
dp[i] = dp[i - 1]
print(dp[-1] % 1000000)
감사하게도 반례를 모아주셨다.
https://www.acmicpc.net/board/view/52607
예외를 못 찾은 흔적...