BOJ

백준 9095 - 1, 2, 3 더하기

yanJuicy 2022. 2. 26. 18:34
반응형

문제

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

 

9095번: 1, 2, 3 더하기

문제 정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다. 1+1+1+1 1+1+2 1+2+1 2+1+1 2+2 1+3 3+1 정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. n은 양수이며 11보다 작다. 출력 각

www.acmicpc.net

 

풀이

1, 2, 3을 이용해서 더한 후 N을 구하는 문제이다. 마지막에 더해지는 숫자에 따라서 N을 구하는 방법을 알 수 있다.

○ + ○ + ○ +  ...  + ●  = N 이라고 할 때, 마지막 ● 에는 1, 2, 3 세 개가 올 수 있다.

따라서 ●는 N - 1, N - 2, N - 3 중에 하나가 되고, 이 세 가지가 되는 방법의 수를 더하면 결국 N까지 더하는 방법의 수가 만들어 진다.

 

D[N] = N을 1, 2, 3으로 나타내는 경우의 수 라고 하면

D[N] = D[N-1] + D[N-2] + D[N-3] 이 된다.

 

코드

c++

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
#include <iostream>
 
using namespace std;
 
int T;
int dp[11];
int result;
 
int f(int N)
{
    if (dp[N]) return dp[N];
    return dp[N] = f(N - 1+ f(N - 2+ f(N - 3);
}
 
 
int main()
{
    cin.tie(0);
    ios::sync_with_stdio(false);
 
    cin >> T;
 
    dp[1= 1;
    dp[2= 2;
    dp[3= 4;
 
    int N;
    while (T--)
    {
        cin >> N;
        cout << f(N) << '\n';
    }
    return 0;
}
cs

 

java

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
import java.util.Scanner;
 
public class Main {
 
    static int t, n;
    static Scanner sc = new Scanner(System.in);
    static int[] d = new int[11];
 
    public static void main(String[] args) {
        t = sc.nextInt();
        solve();
        for (int i = 0; i < t; i++) {
            n = sc.nextInt();
            System.out.println(d[n]);
        }
    }
 
    private static void solve() {
        d[1= 1;
        d[2= 2;
        d[3= 4;
 
        for (int i = 4; i <= 10; i++) {
            d[i] = d[i - 1+ d[i - 2+ d[i - 3];
        }
    }
}
 
cs
반응형

'BOJ' 카테고리의 다른 글

백준 1759 - 암호 만들기  (0) 2022.03.02
백준 - 랜선 자르기  (0) 2022.02.28
백준 2252 - 줄 세우기  (0) 2022.02.22
백준 11725 - 트리의 부모 찾기  (0) 2022.02.17
백준 10816 - 숫자 카드 2  (0) 2022.02.05