Algorithm/baekjoon

[파이썬]baekjoon 2011: 암호코드

갈잃자 2023. 1. 15. 13:01

https://www.acmicpc.net/problem/2011

 

2011번: 암호코드

나올 수 있는 해석의 가짓수를 구하시오. 정답이 매우 클 수 있으므로, 1000000으로 나눈 나머지를 출력한다. 암호가 잘못되어 암호를 해석할 수 없는 경우에는 0을 출력한다.

www.acmicpc.net


전제를 아무것도 안들어왔을 경우 1개, 1개의 숫자만 들어왔을때 경우 1개

 

인덱스를 올려가며, 전의 숫자와 합쳐본 뒤, 26안에 있으며 10이상이라면 전전의 경우를 함께 더해줌 (전전의 경우를 더하는 이유는, 예를들어 25라면 2,5인 경우를 제외한 25인경우에 한번 더 경우가 생기기 때문)

n = list(map(int,input()))
nlength = len(n)
dp = [0 for _ in range(nlength+1)]
if n[0] ==0:
    print(0)

else:
    n = [0] + n
    dp[0] = dp[1] = 1
    for i in range(2,nlength+1):
        if n[i] >0:
            dp[i] += dp[i-1]
        temp = n[i-1] *10 + n[i]
        if temp>=10 and temp<=26:
            dp[i] += dp[i-2]
    print(dp[nlength] %1000000)