Algorithm/백준 알고리즘

백준_2011 암호코드(자바) / DP

미스터로즈 2021. 9. 1. 09:52

시간&메모리 제한

 

문제

 

입력&출력

 

문제풀이

package com.Back;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Back_2011 {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String tmp = br.readLine();
		int[] dp = new int[tmp.length() + 1];
		dp[0] = 1;
		dp[1] = 1;

		if (tmp.charAt(0) == '0') {
			System.out.println(0);
			return;
		}

		for (int i = 1; i < tmp.length(); i++) {
			char rear = tmp.charAt(i - 1);
			if (tmp.charAt(i) >= '1' && tmp.charAt(i) <= '9') {
				dp[i + 1] += dp[i];
				dp[i + 1] %= 1000000;
			}
			if (!(rear == '0' || rear > '2' || (rear == '2' && tmp.charAt(i) > '6'))) {
				dp[i + 1] += dp[i - 1];
				dp[i + 1] %= 1000000;
			}
		}
		System.out.println(dp[tmp.length()] % 1000000000);
	}
}

 

※ 내 생각
각 자릿수에 대한 DP를 이용해서 문제를 해결하는 문제입니다.
각 자릿수에서 만들수 있는 단어를 생각해볼 수 있습니다.
한자릿수에 대해서는 모두 가능하기 때문에 다 더해주면 됩니다.
여기서 중요한 포인트는 두자릿수를 만드는 경우를 처리하는 것입니다.