티스토리 뷰

728x90

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

 

9095번: 1, 2, 3 더하기

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

www.acmicpc.net


  • 해설 : 

정수 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의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오.

 

 

 


  • 풀이 :

처음에는 완전탐색 문제인 줄 알았는데 DP를 사용해서 해결할 수 있는 문제였다. 

점화식을 구한 후, 점화식의 구조에 맞게 함수를 구현해준다.

 

N이 11이하이기때문에 완전 탐색으로도 해결할 수 있다.

 

 

 


  • 소스코드 : 

 

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
#include <iostream>
 
using namespace std;
 
 
 
int N; //주어진 정수
int cache[11]; //N<11
 
//풀어보면 점화식은 f(x)=f(x-1)+f(x-2)+f(x-3)
 
int method(void)
{
        cache[1= 1//1
        cache[2= 2//1+1, 2
        cache[3= 4//1+1+1, 1+2, 2+1, 3
        for (int i = 4; i <= N; i++)
               cache[i] = cache[i - 1+ cache[i - 2+ cache[i - 3];
        return cache[N];
}
 
 
int main(void)
{
        int test_case;
        cin >> test_case;
 
        for (int i = 0; i < test_case; i++)
        {
               cin >> N;
               cout << method() << endl;
        }
        return 0;
 
}
 
 
cs
320x100
댓글
© 2022 WonSeok, All rights reserved