알고리즘
[알고리즘] 백준 10844 자바 JAVA 동적프로그래밍
행복하개!
2020. 10. 11. 19:44
public class BaekJoon_16_10844 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(reader.readLine());
long dp[][] = new long[n + 1][10];
for (int i = 1; i < 10; i++) {
dp[1][i] = 1;
}
for (int i = 2; i <= n; i++) {
for (int j = 0; j < 10; j++) {
if (j == 0)
dp[i][j] = dp[i - 1][j + 1] % 1000000000;
else if (j == 9)
dp[i][j] = dp[i - 1][j - 1] % 1000000000;
else
dp[i][j] = (dp[i - 1][j - 1] + dp[i - 1][j + 1]) % 1000000000;
}
}
long sum = 0;
for (int i = 0; i < 10; i++) {
sum += dp[n][i];
}
writer.write(sum % 1000000000 + "");
writer.flush();
reader.close();
writer.close();
}
}
즉시 풀지 못했던 문제. 2차원 배열까지 생각해내서 해봤는데 자꾸 값이 이상하게 나와서 구글선생님을 참고했다. 풀다가 너무 안풀리면 내려놓는 것도 방법이다... ㅋㅋㅋㅋ 언제나 그렇듯 해답을 보면 바로 머리를 쥐어박지만..
중요한 점은 2차원배열을 쓰고 각 자리수마다 0에서 9까지를 고려해야한다는 점이다. 여기서 좀 더 나아가서 전 자리수가 0일때와 9일때는 10과 89 밖에 없으니까 2 ~ 8 일때와 같이 1+1로 카운팅하면 안된다. 이걸 동적프로그래밍으로 구현하면 끝.
생각의 전환! 조금 더 키우자.