몽상실현개발주의

[BOJ] 2011 / 암호코드 / Python 파이썬 본문

Algorithm PS/BOJ

[BOJ] 2011 / 암호코드 / Python 파이썬

migrationArc 2021. 5. 18. 17:46

[BOJ] 2011 / 암호코드 / Python 파이썬

[BOJ] 2011 / 암호코드 / Python 파이썬

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

 

2011번: 암호코드

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

www.acmicpc.net

 

풀이

암호 코드의 길이와 만들어지는 수에 따라 조건을 달리하여 경우의 수를 구하는 문제이다.

 

  • 첫번째 자리의 암호 코드는 '0' 이 아닐때 1이 된다
  • i 번째 자리의 암호 코드
    1.  i 번째 숫자가 '0' 이 아닐 시, i-1 번째 경우의 수와 같다.
    2. i-1, i 번째 숫자를 두 자리 수인 하나의 숫자로 보았을 때, 10 ~ 26 이라면 i-2 의 경우의 수를 더해준다.

 

nums = list(input())
L = len(nums)

dp = [0] * (L+1)
dp[0] = 1

if nums[0] == "0":
    dp[1] = 0
else:
    dp[1] = 1
    
for i in range(2, L+1):
    if 0 < int(nums[i-1]):
        dp[i] = dp[i-1]
    if 10 <= int(nums[i-2]+nums[i-1]) <= 26:
        dp[i] += dp[i-2]
        
print(dp[-1] % 1000000)

 

경우의 수를 세부 단계로 나누는 부분을, 좀 더 세부적으로 생각하여 논리를 세우는게 부족하였다.

 


참고 블로그

https://rhdtka21.tistory.com/17

 

[파이썬 | BOJ | 2011] 암호코드

https://www.acmicpc.net/problem/2011 문제 상근이와 선영이가 다른 사람들이 남매간의 대화를 듣는 것을 방지하기 위해서 대화를 서로 암호화 하기로 했다. 그래서 다음과 같은 대화를 했다. 상근: 그냥

rhdtka21.tistory.com

 

Comments