Algorithm/DP

BOJ#2011 암호코드

밤이2209 2016. 12. 12. 19:23

BOJ#2011 암호코드


* 문제

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


* 풀이

동적계획법(Dynamic Programming)을 이용합니다.


숫자의 범위가 1~26이므로

어떤 해석할 수 있는 암호가 주어졌을 때, 마지막 숫자는 아래와 같이 3가지 경우로 나눌 수 있습니다.


그리고 아예 해석할 수 없는 경우도 있습니다.


(dp[i] : i번째 숫자까지 해석했을 때, 해석의 가짓수)

1) 한 자리수로만 해석할 수 있는 경우

예 : "251" → 마지막 숫자 "1"은 "1"로 해석 가능하나, "51"로는 해석할 수 없다.


즉, "25"에서 "1"을 추가한 경우


dp[i] = dp[i-1];


2) 두 자리수로만 해석할 수 있는 경우

  예 : "2510" → 마지막 숫자 "0"은 "10"로 해석 가능하나, "0"으로는 해석할 수 없다.


즉, "25"에서 "10"을 추가한 경우


dp[i] = dp[i-2];


3) 한 자리수와 두 자리수로 해석할 수 있는 경우

  예 : "2511" → 마지막 숫자 "1"은 "1" 또는 "11"로 해석할 수 있다.


즉, "25"에서 "11"을 추가한 경우 + "251"에서 "1"을 추가한 경우


dp[i] = dp[i-1] + dp[i-2];


+


4) 입력된 문자열이 아예 해석될 수 없는 경우

  예 : "0", "10000" 은 해석할 수 없다.





* 나의 코드

https://github.com/stack07142/BOJ/tree/master/BOJ%232011_Alphacode

'Algorithm > DP' 카테고리의 다른 글

BOJ#2293 동전1  (0) 2017.01.24
BOJ#11066 파일 합치기 (Merging Files)  (3) 2016.12.23
BOJ#2225 합분해  (0) 2016.12.09
BOJ#1699 제곱수의 합  (0) 2016.12.08
BOJ#11055 가장 큰 증가 부분 수열  (0) 2016.12.07