algorithm/ACMICPC
1, 2, 3 더하기 - 9095
에어컨조아
2019. 11. 19. 23:45
문제 :
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
소스 :
#include <iostream>
using namespace std;
int c;
int arr[3] = { 1,2,3 };
void solution(int index, int v, int sum)
{
//탈출조건
if (v == sum)
{
c++;
return;
}
if (v < sum)
{
return;
}
for (int i = 0; i < 3; i++)
{
//방안 1(재귀를 탈출해서 다시 for문을 수행시 이전에 계산한 값이 sum에 저장되어있음. 그래서 문제였음.)
/*int num = sum;
num += arr[i];
solution(i, v, num);*/
//방안 2
sum += arr[i];
solution(i, v, sum);
sum -= arr[i];
}
}
int main()
{
int n;
cin >> n;
int i = 0;
while (i < n)
{
int v;
cin >> v;
c = 0;
int s = 0;
solution(0, v, s);
cout << c << endl;
i++;
}
return 0;
}