μ΄ λ¬Έμ λ μμΈμν©μ λΉ λ₯΄κ² μΊμΉνλκ² μ€μν λ¬Έμ μλ€.
λ¨Όμ dpλ°°μ΄μ μ΄λ€ 쑰건μΌλ‘ μ΄λ€ λ°μ΄ν°λ₯Ό μ±μΈμ§ μκ°μ ν΄λ΄μΌνλ€.
μ΅λ 5000μ리 μ΄νμ μνΈκ° μ£Όμ΄μ§λ€κ³ νμΌλ, dp[i]μμ iλ μλ¦Ώμκ° λ κ²μ΄κ³ ν΄λΉ μλ¦Ώμμμ λ§λ€ μ μλ κ²½μ°μ μλ₯Ό κΈ°λ‘ν κ²μ΄λ€.
μλ¦Ώμλ λμ μλ¦ΏμλΆν° μμν κ²μΈλ°,
μμ λ¬Έμ μ²λΌ 25114κ° μ£Όμ΄μ‘μ λ,
dp[1] = [2] (1κ°μ§)
dp[2] = [2,5] [25] (2κ°μ§)
dp[3] = [2,5,1] [25, 1] (2κ°μ§)
dp[4] = [2, 5, 1, 1] [2, 5, 11] [25, 1, 1] [25, 11] (4κ°μ§)
dp[5] = [2, 5, 1, 1, 4] [2, 5, 1, 14] [2, 5, 11, 4] [25, 1, 1, 4] [25, 1, 14] [25, 11, 4] (6κ°μ§)
κ° λλ κ²μ΄λ€.
Case 1.
μμ λ¬Έμ μ κ²½μ°μ μλ₯Ό λ°μ Έλ³΄λ©΄μ, 보μ΄λ ν¨ν΄μ΄ μλ€.
A~Z κΉμ§ 1~26μΌλ‘ ννλκΈ° λλ¬Έμ,
1~9 μ¬μ΄μ μ«μκ° μΆκ°λλ κ²½μ°, λ 립μ μΌλ‘ μνλ²³μ ννν μ μκΈ° λλ¬Έμ μ μ΄λ, μ΄μ dpκ°μ κ·Έλλ‘ κ°κ³ μ¨λ€λ μ¬μ€μ μ μ μλ€.
dp[1] → dp[2] λ‘ κ°λ κ³Όμ μμ
2μλ€ ,5λ§ λΆμ¬μ£Όλ©΄ νλμ κ²½μ°μ μκ° μκΈ°κΈ° λλ¬Έμ 2,5 κ²½μ°μμλ₯Ό κ°κ² λλ κ²μ΄κ³
dp[2] → dp[3] λ‘ κ°λ κ³Όμ μμ
[2,5] [25] κ²½μ°μ μμ ,1 λ§ λΆμ¬μ£Όλ©΄ [2,5,1] [25,1] κ²½μ°μ μλ 무쑰건 μκΈ΄λ€λ 보μ₯μ λ°μ μ μκ³
dp[3] → dp[4] κ°μ μμ
[2,5,1] [25,1] κ²½μ°μ μμ ,1 λ§ λΆμ¬μ£Όλ©΄ [2,5,1,1] [25,1,1] κ²½μ°μ μλ 무쑰건 μκΈ΄λ€λ 보μ₯μ λ°μ μ μλ€.
λ§μ§λ§μΌλ‘ dp[4] → dp[5] κ³Όμ μμλ
[2, 5, 1, 1] [2, 5, 11] [25, 1, 1] [25, 11] κ²½μ°μ μμ ,4λ₯Ό λΆμ¬μ£Όλ©΄ [2, 5, 1, 1, 4] [2, 5, 11, 4] [25, 1, 1, 4] [25, 11, 4] λμΌν 4κ°μ κ²½μ°μ μκ° μκΈ΄λ€.
μ¦, λΆλ μ«μκ° 1μμ 9 μ¬μ΄μ κ°μ κ°μ§λ©΄, dp[i+1]μ ν¬κΈ°λ μ΅μ dp[i]μ κ²½μ°μ μλ₯Ό ν¬ν¨νκΈ°λλ¬Έμ
dp[i+1] = dp[i] λ‘ ννν μ μλ€.
μ¬κΈ°μ μ£Όμν΄μΌν μ¬νμ 0μ΄ λΆμμ λμ΄λ€.
0μ 1~9μ λ€λ₯΄κ² λ 립μ μΌλ‘ [2,5,0] κ³Ό κ°μ΄ νΌμ μ°μΌ μ μκΈ° λλ¬Έμ, 1μμ 9μ¬μ΄μ μ«μκ° λ€μ λΆμμλμλ§
dp[i+1] = dp[i] λ‘ ννν μ μλ€.
Case 2.
dp[3] → dp[4] κ³Όμ μμλ 2κ°μμ 4κ°λ‘ λμ΄λ¬κ³ , dp[4] → dp[5] κ³Όμ μμλ 4κ°μμ 6κ°λ‘ λμ΄λ¬λ€.
dp[3] → dp[4] μν©μ λ¨Όμ μ΄ν΄λ³΄λ©΄ Case 1. μμ μ΄ν΄λ΄€λ―μ΄ μκΈ°λ 2κ°μ κ²½μ°μμμ λλ€λ₯Έ 2κ°μ κ²½μ°μ μκ° λ°μνλ€.
[2,5,1] [25, 1] μ κ²½μ°μ μμ 1μ΄ λΆλκ²½μ° λ 립μ μΌλ‘ λΆμ΄λ κ²μ΄ μλλΌ ν©μ³μ 11λ‘ ννν μ μμ΄ [2, 5, 11] [25, 11] μ κ°μ μλ‘μ΄ κ²½μ°μ μκ° μκΈ΄λ€.
μ¦ λ€μ λΆλ μ«μκ° ν©μ³μ Έμ 10~ 26 κ°μ λ§λ€μ΄λ΄λ©΄ μλ‘μ΄ μνλ²³ νλλ‘ ννν μ μκΈ° λλ¬Έμ μλ‘μ΄ κ²½μ°μ μκ° μκΈ°λ κ²μ΄λ€.
κ²°λ‘ λΆν° λ§νλ©΄, μμ κ°μ κ²½μ°μλ Case 1. μμ ꡬνλ dp[i+1] = dp[i] μν©μμ dp[i+1] μ dp[i-1] κ°μ νλ² λ λν μ μλ€.
dp[3] → dp[4] κ³Όμ μμ
11μ΄ λ§λ€μ΄μ§κ³ μ΄λ μνλ²³ νλλ₯Ό ννν μ μλ€.
μ¦. [2,5] [25] μν©μμ 11μ λΆμΈλ€κ³ μκ°νλ©΄ [2,5 ,11] [25 ,11] μ΄ λλ κ²μ΄λ€.
κ·Έλ¦¬κ³ [2,5] μ [25] λ dp[2]μ κ²½μ°μ μμ κ°λ€.
λ§μ§λ§μΌλ‘, dp[4] → dp[5] κ³Όμ μ μ΄ν΄λ³΄λ©΄
1λ€μ 4κ° λΆκΈ° λλ¬Έμ, μ΄ κ²½μ° μμ 14λ‘μ νλμ λ 립μ μΈ μνλ²³μΌλ‘ λ§λ€ μ μλ€.
μ¦ dp[3] κ²½μ°μ μμΈ [2,5,1] [25, 1] μμ ,14 λ₯Ό λΆμ¬μ£Όλ κ²κ³Ό κ°μμ§λ κ²μ΄λ€.
[2,5,1, 14] [25,1,14] μ κ²½μ°μ μκ° Case 2.μ κ°μ μν©λλ¬Έμ μκΈ°κ² λλ κ²μ΄λ€.
λν μ μΌ μ²«λ²μ§Έ μλ¦Ώμκ° 0μΌλ‘ μμνλ κ²½μ°λ μ΄λ€ μνλ²³μΌλ‘λ ν΄λ λ μ μκΈ° λλ¬Έμ μ€λ₯λ‘ νλ¨νκ³ 0 κ°μ μΆλ ₯νλ©΄ λλ€.
κ²°λ‘ μ
1. Case 1.μ μ΄μ λ‘ λ€μ λΆλ μ«μκ° 0μ΄ μλ 1~9 κ°μ΄λΌλ©΄ μ΅μ μ΄μ dpκ°μ κ²½μ°μ μλ₯Ό κ°μ μ μκ² λλ€.
2. Case 2.μ μ΄μ λ‘ λ€μ λΆλ μ«μλ₯Ό ν©μ³μ 10~26μ λ§λ€ μ μλ€λ©΄, dp[i]λ dp[i-2]μ κ²½μ°μ μμ 10~26μ¬μ΄μ λ 립μ μΈ μνλ²³μ λΆμΈ κΌ΄μ΄ λκΈ° λλ¬Έμ dp[i-2]μ κ²½μ°μ μλ₯Ό κ°μ Έμ¬ μ μλ€.
3. 0μΌλ‘ μμνλ μλ μνλ²³μΌλ‘ ννν μ μμΌλ―λ‘ 0κ°μ 리ν΄νλ€.
μ μΈκ°μ§λ₯Ό μ½λλ‘μ ꡬννλ©΄ μ λ΅μ λ§μΆ μ μλ€!
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
long[] dp = new long[input.length()+1];
dp[0] =1;
dp[1] = 1; // 0μΈ κ²½μ° μ μΈνλ©΄ 무쑰건 1κ°
if (input.charAt(0) == '0') {
System.out.println(0);
return;
}
for (int i = 1; i < input.length(); i++) {
char front = input.charAt(i-1); //μ μ«μ
char back = input.charAt(i);
int num = (front-'0')*10+(back-'0'); //μ«μλ₯Ό ν©μ³€μ λ
if(back>='1' && back<='9') {//Case 1
dp[i+1]=dp[i];
dp[i+1]%=1000000;
}
if((num>=10 && num<=26)) { //Case 2
dp[i+1]+=dp[i-1];
dp[i+1]%=1000000;
}
}
System.out.println(dp[input.length()]%1000000);
}
}