본문 바로가기
algorithm/ACMICPC

1, 2, 3 더하기 - 9095

by 에어컨조아 2019. 11. 19.

문제 :

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

댓글