Algorithm/python 백준

파이썬 백준 2011번 : 암호코드

✿(๑❛ڡ❛๑)✿ 2024. 5. 21. 10:55
728x90
SMALL

문제

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

 

 

풀이

알고리즘

DP

숫자는 한자리수로 들어가거나, 두자리수로 들어갈 경우가 있다. 

1. 현재자리수가 0보다 클때 -> 이전 dp값 더하기 (마지막에 원소 하나만 플러스됨)
2. 현재자리수와 이전 자리수를 합쳤을때 10~26사이의 수일때 -> 전전dp 값 더하기

 

import sys

N=sys.stdin.readline().strip()
d=[0]*(len(N)+1)
if N[0]=='0':
    print(0)
    exit()

d[0]=1
d[1]=1
for i in range(2,len(N)+1):
    if int(N[i-1])>0: #한자리수로 들어갈때
        d[i]+=d[i-1]
    if 26>=int(N[i-2]+N[i-1])>=10: #두자리로 들어갈때
        d[i]+=d[i-2]
    if int(N[i-1])==0 and int(N[i-2])>2: #만들수 없는 경우
        print(0)
        exit()
print((d[len(N)])%1000000)

728x90
LIST