상근이와 선영이가 다른 사람들이 남매간의 대화를 듣는 것을 방지하기 위해서 대화를 서로 암호화 하기로 했다. 그래서 다음과 같은 대화를 했다.
어떤 암호가 주어졌을 때, 그 암호의 해석이 몇 가지가 나올 수 있는지 구하는 프로그램을 작성하시오.
Input | Return |
---|---|
25114 | 6 |
1111111111 | 89 |
pw
입력0
출력dp[n]
출력# 코드
pw = [0] + list(map(int, input()))
print(pw)
dp = [0 for i in range(len(pw) + 1)]
if pw[1] == 0:
print(0)
else:
n = len(pw) - 1 # 인덱스가 1부터 시작하도로 [0]을 추가하였으므로 -1 한다.
dp[0] = 1
dp[1] = 1 # 첫 번째 값 초기화
# 첫 값부터 마지막값까지 하나씩 추가하며 개수 확인
for i in range(2, n+1):
# 현재 pw가 0보다 큰 경우
# 이전 까지의 개수 추가
if pw[i] > 0:
dp[i] += dp[i-1]
# 이전 값과 현재 값으로 수 계산
temp = pw[i] + (pw[i-1] * 10)
# temp == 0인 경우 0이 연속으로 나온 경우이며
# 잘못된 경우이므로 0을 반환한다.
if temp == 0:
dp[n] = 0
break
# 10이상 26이하인 경우 2개 이전까지의 개수 추가
if temp >= 10 and temp <= 26:
dp[i] += dp[i-2]
# 현재 값을 1000000으로 나눈 나머지로 저장
dp[i] %= 1000000
# 만들 수 있는 가지수 반환
print(dp[n])