[백준] 2011 암호코드
진짜 도랐나보다
mod 안나눠주고 20분동안 대체 왜안되지 하고 반례 뒤지고 있었음 ^^….
import java.util.*;
import java.io.*;
// DP - Bottom Up
public class Main{
static final int mod = 1000000;
public static void main(String []args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
// 입력이 0 인 경우 처리
if( s == null ){
System.out.println(0);
return;
}
int len = s.length();
int[] a = new int[len+1]; // 주어진 배열을 담을 변수
long[] d = new long[len+1]; // 'i번째부터 끝까지' 일 때 가능한 경우의 수
for(int i = 0 ; i < len ; i++){
a[i] = s.charAt(i) - '0';
}
d[len] = 1; // 이건 사실 숫자가 없는 자린데 1로 줘야된다
d[len-1] = a[len-1] == 0 ? 0 : 1; // 맨 끝자리애가 0이면 여기는 0으로 초기화
// 뒤에서부터 수행해주자
for(int i = len-2 ; i >= 0 ; i-- ){
int c = a[i];
// 0 인 경우 더이상 추가될 수 있는게 없다. 앞자리가 1이나 2이길 바랄뿐. 패스~
if(c == 0){
continue;
}else if(c == 1){ // 1인 경우 뒷자리 숫자가 뭐든간에 두가지 경우가 가능함
d[i] = (d[i+1] + d[i+2])%mod;
continue;
}else if(c == 2){ // 2인 경우 뒷자리 숫자가 6이하이면 두가지 경우가 가능함
if(a[i+1] <= 6){
d[i] = (d[i+1] + d[i+2])%mod;
continue;
}
}
// 여기까지 오는 애들은 1,2가 아니던지 2인데 뒷자리 숫자가 7이상인거다
d[i] = d[i+1]%mod;
}
System.out.println(d[0]);
}
}
Comments