Algorithm (PS)

[백준] 2011 암호코드 in Python -> 조금 까다로웠던 DP 문제

minjiwoo 2022. 2. 18. 12:37
728x90

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

 

2011번: 암호코드

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

www.acmicpc.net

두자릿수일수도 있고 한자릿수일수도 있다 이게 헷갈렸다 근데 이게 이 문제의 포인트 ! 

단, 두자릿수는 10 ~ 26 이어야 한다. Z가 26이므로 마지막 알파벳이된다. 

한자릿수는 0이면 안된다 !! A가 1부터 시작하기 때문이다 

 

그리고 한자리수로 0보다 클때 : dp[i] += dp[i-1] 로 이전값을 더해준다 

현재 검사중인 인덱스와 그다음 인덱스를 합쳐서 10이상 26이하의 두자릿수로 볼 수 있을 때 : 두자릿수에 대한 경우이므로 dp[i-2] 값을 dp[i] 에 더해준다 

n = input()
l = len(n)
dp = [0]*(l+1)

if n[0] == "0":
    print(0)
else:
    dp[0] = 1
    dp[1] = 1
    for i in range(2, l+1):
        if int(n[i-1]) > 0: # 한자리수 일 때 
            dp[i] += dp[i-1]
        temp = int(n[i-1]) + 10 * int(n[i-2])
        if 10 <= temp < 27:
            dp[i] += dp[i-2]

    print(dp[l]%1000000)

참 매력있는 dp 문제..!!! 알쏭달쏭해서 재밌당 

728x90