728x90
이 문제를 처음에 접할 때, 문제가 무슨 말인지 이해가 가질 않았다. 그래서 힌트를 보고 문제가 무슨 말을 하고 싶었는지 알 수 있었다. 그러고 나서 점화식을 어떻게 찾을지 N = 1부터 N = 3까지 개수를 다 써보았다. 하지만 처음에는 이차원 배열을 생각하지 못하고, 규칙만 찾았는데 표로 정리해보니 이차원 배열을 사용하면 되겠다는 생각이 들었다. 그래서 기본 점화식인 dp[i][j] = dp[i-1][j] + dp[i][j-1]을 구했었다. 하지만 if( j == 0) 이 부분을 생각하지 못하고 N = 1일 때만 1로 초기화를 시키고 나머지 dp [N][k]에서 k가 0일 때, 1로 어떻게 초기화를 시켜야 하나 엄청 고민을 했다. 그래서 고민을 풀지 못한 채 점화식만 찾고 풀이를 하질 못했다. 그래서 다른 블로그들을 참고하여 아 j == 0 일 때 그냥 0으로 초기화시키면 되는구나 라고 깨닫고 바로 풀이를 썼다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
static int[][] dp;
static int[] result;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
dp = new int[1001][10];
result = new int[N+1];
for (int i = 0; i < 10; i++)
dp[1][i] = 1;
result[1] = 10;
for(int i = 2; i <= N; i++){
for(int j = 0; j < 10; j++) {
if (j == 0) {
dp[i][j] = 1;
} else {
dp[i][j] = (dp[i - 1][j] + dp[i][j - 1]) % 10007;
}
result[i] += dp[i][j];
}
}
System.out.println(result[N] % 10007);
}
}
|
cs |
728x90
'BOJ(Java)' 카테고리의 다른 글
자바(백준) 1325 효율적인 해킹 (0) | 2020.10.26 |
---|---|
자바(백준) 2606 바이러스 (0) | 2020.10.06 |
자바(백준) 11726 2*N 타일링 2 (0) | 2020.09.28 |
자바(백준) 11726 2*n 타일링 (0) | 2020.09.28 |
자바(백준) 1463 1로 만들기 (0) | 2020.09.28 |