자바생
Published 2020. 9. 28. 23:41
자바(백준) 11057 오르막 수 BOJ(Java)
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
profile

자바생

@자바생

틀린 부분이 있다면 댓글 부탁드립니다~😀

검색 태그