1, 2, 3 더하기 9 16195

LJM·2023년 7월 10일
0

백준풀기

목록 보기
168/259
post-thumbnail

https://www.acmicpc.net/problem/16195

규칙을 찾는게 어렵다 검색해서 규칙을 알았는데 왜 그렇게 되는건지 모르겠다

위의 그림처럼 1, 3, 6 더하면 10 이 된다


위의 그림처럼 1, 2, 4 더하면 7 이 된다

    처음에는 dp 배열을 구성하는 데 필요한 시간 복잡도가 O(n^2)입니다. 왜냐하면 2중 for 루프를 통해 n의 크기까지 모든 가능한 조합에 대한 결과를 계산하기 때문입니다.

    그 다음에는 테스트 케이스의 수(T)에 대해 반복문을 실행합니다. 각 테스트 케이스마다 최악의 경우 O(n) 시간이 소요됩니다. 이 부분의 시간 복잡도는 따라서 O(T*n)입니다.

따라서 전체 시간 복잡도는 dp 배열 구성 비용과 각 테스트 케이스를 처리하는 비용을 합친 것이므로 O(n^2 + T*n)이라고 할 수 있습니다. 이는 입력 크기 n과 테스트 케이스의 수 T에 따라 결정됩니다.
import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException{

        long[][] dp = new long[1001][1001];

        dp[1][1] = 1;
        dp[2][1] = 1;
        dp[2][2] = 1;
        dp[3][1] = 1;
        dp[3][2] = 2;
        dp[3][3] = 1;//3 이란 숫자를 만드는데 3개의 숫자를 사용하는경우 1

        for (int i = 4; i < 1001; i++) {
            for (int j = 2; j <= i; j++) {
                dp[i][j] = (dp[i-3][j-1] + dp[i-2][j-1] + dp[i-1][j-1]) % 1000000009;
            }

        }

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int T = Integer.parseInt(br.readLine());
        String[] input;

        int n = 0;//0~1000
        int m = 0;// n <=
        long answer = 0;
        for (int i = 0; i < T; i++) {
            input = br.readLine().split(" ");
            n = Integer.parseInt(input[0]);
            m = Integer.parseInt(input[1]);

            for (int j = 0; j <= m; j++) {
                answer = (answer + dp[n][j]) % 1000000009;
            }
            System.out.println(answer);
            answer = 0;

        }

    }
}
profile
게임개발자 백엔드개발자

0개의 댓글