백준 알고리즘

[C언어] 백준알고리즘 9095번 1,2,3 더하기

컴공코딩러 2019. 3. 18. 11:19

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


문제


정수 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보다 작다.


출력


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


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
#include <stdio.h>
void sum_123(int N)
{
    int dp[12];
    int i;
    dp[0= dp[1= 1;
    dp[2= 2, dp[3= 4;
    if (N < 4)
    {
        printf("%d\n", dp[N]);
        return;
    }
    else
    {
        for (i = 4; i <= N; i++)
            dp[i] = dp[i - 1+ dp[i - 2+ dp[i - 3];
    }
    printf("%d\n", dp[N]);
}
int main()
{
    int N;
    int num;
    int i;
    scanf("%d"&N);
    for (i = 0; i < N; i++)
    {
        scanf("%d"&num);
        sum_123(num);
    }
}
 
 
cs



이문제를 푸는법은 생각보다 간다했다.

결론부터 표현하자면 

F(N)= F(N-1)+F(N-2)+F(N-3) 이라는 식이나온다

왜냐면 


1는 1개라고 가정

2는 1+1 2 두개

3은 1+1+1 2+1 1+2 3 3개

4는 위에 설명대로 7개이다

5는 12이다


그러므로 4이하는 배열값을출력 그이상은 배열을 더해주면서 계산하면된다.