문제 :
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;
}
'algorithm > ACMICPC' 카테고리의 다른 글
다음 순열 - 10972 (0) | 2019.11.19 |
---|---|
차이를 최대로 - 10819 (0) | 2019.11.19 |
일곱 난쟁이 - 2309 (0) | 2019.11.19 |
날짜 계산 - 1476 (0) | 2019.11.19 |
N과 M (12) - 15666 (0) | 2019.11.14 |
댓글