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 |