알파벳은 26개이므로 암호 코드는 1부터 26까지 가능하다.
만약 입력 받은 숫자가 0으로 시작한다면 만들 수 없으므로 0을 출력하고 종료한다.
한 자리일 때 경우의 수는 모두 1이다. (1~26사이에 있기 때문)
두 자리일 때는 10~26 사이에 있을 때만 경우의 수가 하나 더 증가한다.
이를 식으로 나타내면,
한 자리만 가능할 때의 경우의 수는 dp[i] += dp[i-1]
두 자리도 가능할 때의 경우의 수는 dp[i] += dp[i-2] 가 된다.
dp[0]에 1을 넣어 식을 맞춰 준다.
n = list(map(int, input()))
dp = [0 for i in range(len(n)+1)]
if n[0] == 0:
print('0')
exit(0)
dp[0] = dp[1] = 1
n = [0] + n
for i in range(2, len(n)):
if n[i] > 0:
dp[i] += dp[i-1]
tmp = n[i-1] * 10 + n[i]
if tmp >= 10 and tmp <= 26:
dp[i] += dp[i-2]
print(dp[len(n)-1] % 1000000)
혼자 풀기엔 너무 어렵고 복잡한 문제였다. 다른 사람의 풀이를 보고도 한참 고민을 하면서 코드를 완성했다.
https://jyeonnyang2.tistory.com/55
https://archive-me-0329.tistory.com/23