본문 바로가기
알고리즘/DP

[java 백준] 실버 3/ 9095번 1,2,3 더하기

by Meaning_ 2021. 7. 28.
728x90
반응형

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

 

9095번: 1, 2, 3 더하기

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

www.acmicpc.net

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.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class Main {
 
    public static int n, t;
    public static int[] dp;
 
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 
        t = Integer.parseInt(br.readLine());
        int[] count = new int[t];
        dp = new int[12];
        dp[1= 1;
        dp[2= 2;
        dp[3= 4;
 
        for (int k = 4; k <= 11; k++) {
            dp[k] = dp[k - 1+ dp[k - 2+ dp[k - 3];
 
        }
 
        for (int i = 0; i < t; i++) {
            n = Integer.parseInt(br.readLine());
 
            count[i] = dp[n];
 
        }
        for (int s : count) {
            System.out.println(s);
        }
 
    }
 
}
cs

f[1]은 1 -->1개

f[2]는 1 1, 2 -->2개

f[3]은 1 1 1 , 1 2, 2 1, 3 -->4개

f[4]=7

그렇다면 f[5]는 몇개 일까?

1 1 1 1 1 -->1개

1 1 1 2 --> 자리 바꾸는 거 까지 고려하면 4!/3!  으로 4개

1 1 3-->3!/2!=3

2 2 1-->3!/2!=3

2 3 -->2!=2

총 13이다. 

그럼 여기서 규칙을 발견할 수 있다. f[5]=f[4]+f[3]+f[2]이 되는 것이다.

그렇기에 4이상 부터는 f[n]=f[n-3]+f[n-2]+f[n-1] 의 점화식을 이용할 수 있다!

728x90
반응형

댓글