본문 바로가기
Beakjoon&프로그래머스/Java

[백준/Java] 11057번 오르막 수

by 현장 2026. 1. 9.

-Code

import java.util.Arrays;
import java.util.Scanner;

public class BOJ11057 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();

            int[][] dp = new int[n + 1][10];
            for (int i = 0; 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];
                        continue;
                    }
                    dp[i][j] = (dp[i - 1][j] + dp[i][j - 1]) % 10007;
                }
            }

            long answer = 0;
            for (int i = 0; i < 10; i++) {
                answer += dp[n][i];
            }
            System.out.println(answer % 10007);

    }
}

예제 입출력을 보고 숫자 갯수가 많아질때마다 이전 숫자 갯수의 ((n - 1) * n) / 2들의 합이었음을 알고 2차원 배열로 구하려 했으나 범위 문제와 이전 값들의 조합으로 만들 수 있는 것을 꼬아서 생각해 이상하게 접근을 했었습니다. 그래서 다 풀지 못하고 이상한 부분에 대해서 찾아보니 이전 row - 1의 값과 col - 1의 값을 더해주면 답이나오는 파스칼 삼각형을 사용하면 됨을 깨닫고 해결했습니다.