본문 바로가기
알고리즘/[python] 백준 BOJ

[python] 백준 2011 암호코드

by Alan_Kim 2023. 3. 14.
728x90
반응형

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

 

2011번: 암호코드

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

www.acmicpc.net

 

 

문제 해결

  • 각 자리수 숫자를 분석해야한다.
  • 알파벳으로 바꿀 때 해석의 가지수에 영향을 주는 것은 바로 앞에 수 하나이다.
  • 하나씩 분석해서 이전의 수와 연결해서 10이상 26이하가 나오면 다른 암호로 해석할 여지가 있다.
  • DP를 이용할 것이다. DP[i]는 i번째 수까지 봤을 때 해석의 가지수이다.
  • 바로 앞에 수와 독립적으로 해석하는 가지수는 dp[i-1]이고 연결해서 해석하는 가지수는 dp[i-2]이다.

 

CODE

code = [int(c) for c in str(input().rstrip())]
dp = [0 for _ in range(len(code)+1)]
if code[0] ==0:
    print(0)
    exit()
code = [0] + code
dp[0] = dp[1] = 1
for i in range(2,len(code)):
    if code[i] >0:
        dp[i] += dp[i-1]
    temp = code[i-1]*10 + code[i]
    if temp>=10 and temp<=26:
        dp[i] += dp[i-2]
print(dp[-1]%1000000)
728x90
반응형

댓글