Lewis's Tech Keep
[백준] 암호코드 본문
참고 : www.acmicpc.net/problem/2011
2011번: 암호코드
나올 수 있는 해석의 가짓수를 구하시오. 정답이 매우 클 수 있으므로, 1000000으로 나눈 나머지를 출력한다. 암호가 잘못되어 암호를 해석할 수 없는 경우에는 0을 출력한다.
www.acmicpc.net
- dp 문제
- dp[i] : dp[i] + dp[i-1] (1~9 사이일 경우)
- dp[i] : dp[i] + dp[i-1] + dp[i-2] (10~26사이일 경우) 두자리 수 고려
- 가장 깔끔하신 분 풀이 보고 찾아보았다. (github.com/hotehrud/acmicpc/blob/master/algorithm/dp/2011.java)
더보기
import java.util.*;
public class Solution {
private static String n;
private static int[] dp;
private static int[] arr;
private static int MOD = 1_000_000;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextLine();
int len = n.length();
dp = new int[len+1];
arr = new int[len+1];
for (int i = 1; i <= len; i++) {
arr[i] = n.charAt(i-1) - '0';
}
dp[0] = 1;
for (int i = 1; i <= len; i++) {
if(arr[i] != 0) dp[i] = (dp[i] + dp[i-1]) % MOD;
int overTen = arr[i] + arr[i-1] * 10;
if(10 <= overTen && overTen <= 26) dp[i] = (dp[i] + dp[i-2]) % MOD;
}
System.out.println(dp[len] % MOD);
}
}
Comments