티스토리 뷰

www.acmicpc.net/problem/15990

 

15990번: 1, 2, 3 더하기 5

각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 1,000,000,009로 나눈 나머지를 출력한다.

www.acmicpc.net

1. 문제 

정수 4를 1, 2, 3의 합으로 나타내기

단, 같은 수를 두 번 이상 연속해서 사용하면 X

 

입)

3

4

7

10

 

출)

3

9

27

 

2. 풀이 

import java.util.*;

public class Main {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        long[][] D = new long[100001][4];
        for (int i = 1; i < 100001; i++) {
            if (i == 1) {
                D[i][1] = 1;
            } else if (i == 2) {
                D[i][2] = 1;
                D[i][1] = (D[i-1][2] + D[i-1][3])%1000000009;
            } else if (i == 3) {
                D[i][3] = 1;
                D[i][1] = (D[i-1][2] + D[i-1][3])%1000000009;
                D[i][2] = (D[i-2][1] + D[i-2][3])%1000000009;
            } else {
                D[i][1] = (D[i-1][2] + D[i-1][3])%1000000009;
                D[i][2] = (D[i-2][1] + D[i-2][3])%1000000009;
                D[i][3] = (D[i-3][1] + D[i-3][2])%1000000009;
            }
        }
        int cnt = sc.nextInt();
        while (cnt-- > 0) {
            int N = sc.nextInt();
            System.out.println((D[N][1] + D[N][2] + D[N][3])%1000000009);
        }
    }
}

입력값마다 매번 계산할 경우 시간 초과 발생

그렇기 때문에 미리 최대 입력값까지 데이터를 계산해서 저장해두고, 그 후 입력값마다 기존에 세팅되어있는 값들을 합산해서 출력

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
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
글 보관함