[백준]11057 오르막 수

서은경·2022년 12월 5일
0

CodingTest

목록 보기
43/71

너무 어려웠다ㅠ 풀이의 도움을 받았다..
처음에 이차원배열로 접근할 생각을 아예 못해서 한참 헤맸다. 나름의 규칙을 찾은 줄 알았는데 아니었다. 뭔가 이 유형에서 항상 헷갈리는 듯 ?! 이차원 배열로 어떤 수로 끝나는 조합을 저장해서 사용하는 방법을 잘 못 써먹는 것 같다 🤤

package baekjoon;

import java.util.Scanner;

public class Main_11057 {
    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++){
                for(int k=0; k<=j; k++){
                    dp[i][j] += dp[i-1][k];
                    dp[i][j] %= 10007;
                }
            }
        }
        int sum = 0;
        for(int i=0; i<10; i++){
            sum += dp[N][i];
        }
        System.out.println(sum%10007);
    }
}

N은 자릿수 / i는 끝나는 수
로 정해서 값을 저장하면 되는 문제였다.
예를 들어 2를 입력값으로 받았다면
[2][0] = 두자릿수 중 0으로 끝나는 수의 개수 00 = 1
[2][1] = 두자릿수 중 1로 끝나는 수의 개수 01 11 = 2
[2][2] = 두자릿수 중 2로 끝나는 수의 개수 02 12 22 = 3
.
.
.
적다보면 이런 규칙을 찾을 수 있다.

[2][0] = [1][0] = 1
[2][1] = [1][0] + [1][1] = 1+1 = 2
[2][2] = [1][0] + [1][1] + [1][2] = 1+1+1 = 3

N-1의 0부터 i로 끝나는 수의 갯수까지의 합이 곧 N의 i로 끝나는 갯수가 된다.
풀이를 이해하는데 손으로 적고 한참 걸렸는데 막상 보니 별거 아니다.. 쫄지말자 !!! 배우면 된다 !!!

0개의 댓글

관련 채용 정보