728x90
https://www.acmicpc.net/problem/2011
두자릿수일수도 있고 한자릿수일수도 있다 이게 헷갈렸다 근데 이게 이 문제의 포인트 !
단, 두자릿수는 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
'Algorithm (PS)' 카테고리의 다른 글
[백준] 2263 트리의 순회 -> 트리의 inorder, postorder의 성질을 이해하자 (0) | 2022.02.21 |
---|---|
[백준] 1918 후위표기식 Python - 자료구조 시간에 나온 stack 과제 (0) | 2022.02.21 |
[백준/삼성기출] 14889 스타트와 링크 - 완전탐색과 combinations (0) | 2022.02.18 |
[백준] 10819 in Python 차이를 최대로 (0) | 2022.02.17 |
[백준] 1967 트리의 지름 : 다익스트라를 응용하자 ! (0) | 2022.02.16 |