
문제 이해하고 정답 코드를 봐도 이해가 안되어서 애 좀 먹었다
import java.util.Scanner;
public class Main {
final static long mod = 1000000000;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
long[][] dp = new long[N + 1][10];
// 첫 번째 자리수는 오른쪽 맨 끝의 자릿수이므로 경우의 수가 1개밖에 없음
for(int i = 1; i < 10; i++){
dp[1][i] = 1;
}
// 두 번째 이상 자릿수부터 N까지 탐색
for(int i = 2; i<= N; i++){
// i 번째 자릿수의 자릿값들을 탐색( 0 ~ 9 )
for(int j = 0; j < 10; j++){
//j = 0, 즉 자릿값이 0이라면 이전 자릿수의 첫번째 자릿수만 가능
if(j == 0){
dp[i][0] = dp[i - 1][1] % mod;
}
//j = 9라면 이전 자릿수는 8만 가능
else if (j==9){
dp[i][9] = dp[i-1][8] % mod;
}
//그 외의 경우 이전 자릿수의 자릿값 +1, -1의 합이 됨
else {
dp[i][j] = (dp[i-1][j-1] + dp[i-1][j-1]) % mod;
}
}
}
long result = 0;
//각 자릿값마다의 경우의 수를 모두 더해준다
for(int i =0; i<10; i++){
result += dp[N][i];
}
System.out.println(result % mod);
}
}
파이팅
'백준온라인' 카테고리의 다른 글
(JAVA) 백준온라인 1699번 - 제곱수의 합 (0) | 2023.09.22 |
---|---|
(JAVA) 1912번 - 연속합 (0) | 2023.09.21 |
(JAVA) 백준온라인 16194번 - 카드 구매하기 2 (0) | 2023.09.12 |
(JAVA) 백준온라인 11052번 - 카드 구매하기 (0) | 2023.09.12 |
(JAVA) 백준온라인 9095번 - 1, 2, 3 더하기 (0) | 2023.09.11 |