- URL : https://www.acmicpc.net/problem/2011
- 소스코드
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static int mod = 1000000; public static void main(String[] args) throws NumberFormatException, IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String input = br.readLine(); int length = input.length(); int[] dp = new int[length + 1]; dp[0] = 1; for (int i = 1; i <= length; i++) { int num = input.charAt(i - 1) - '0'; if (1 <= num && num <= 9) { dp[i] += dp[i - 1]; dp[i] %= mod; } if (i == 1) { continue; } if ((input.charAt(i - 2) - '0') == 0) { continue; } int prev = (input.charAt(i - 2) - '0') * 10; int curr = input.charAt(i - 1) - '0'; if (prev + curr <= 26) { dp[i] += dp[i - 2]; dp[i] %= mod; } } System.out.println(dp[length]); } }
- My Thinking
- Logic
여기서 가장 중요한 부분은 문자열에 " " 빈 값을 넣는 이유는 index가 2일 때 dp[i-2]를 처리하기 위해서이다. 그리고 dp[0]을 1로 두는 이유는 경우의 수의 문제인 경우 dp[0]을 1로 두고서 계산하는 경우가 많다. 0개를 사용해서 만든 " "를 사용한 방법 + 1번째 자리까지 해석했을 때 경우의 수 = dp[1] 0개를 사용해서 만든 " "를 사용한 방법 + 2번째 자리까지 해석했을 때 경우의 수 = dp[2] |
'전공지식 > 알고리즘' 카테고리의 다른 글
[백준][그래프][2667] 단지번호붙이기 (0) | 2017.01.08 |
---|---|
[백준][DP][9465]스티커 (0) | 2016.12.18 |
[백준][DP][2193] 이친수 (0) | 2016.12.15 |
[백준][DP][11057] 오르막 수 (0) | 2016.12.15 |
[백준][DP][10844] 쉬운 계단 수 (0) | 2016.12.15 |