본문 바로가기
Problem Solving

[BOJ 9095] 1, 2, 3 더하기

by Ladun 2020. 1. 2.

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


1, 2, 3의 경우만 생각하여 풀면 된다.

 

4는 3 + [1], 2 + [2], 1 + [3] ([n]은 n을 만들 수 있는 경우의 수) 로 볼 수 있다.

------

3 + (1)

2 + (2), 2 + (1 + 1)

1 + (3), 1 + (2 + 1), 1 + (1 + 2), 1 + (1 + 1 + 1)

------

즉, 어떤 수 n에 대하여 n을 1, 2, 3을 이용하여 만드는 경우의 수는

 

n-1의 경우의 수, n-2의 경우의 수, n-3의 경우의 수를 다 더한 것과 같다.

 

1, 2, 3의 경우의 수를 처음에 초기화해 놓고 이를 이용하여 n번째 수의 경우의 수를 구하면 된다.


#include <stdio.h>


int DP[11];
int main()
{

	int T, n;
	scanf("%d", &T);

	DP[1] = 1;
	DP[2] = 2;
	DP[3] = 4;

	for (int i = 0; i < T; i++)
	{
		scanf("%d", &n);
		for (int j = 4; j <= n; j++)
			DP[j] = DP[j - 1] + DP[j - 2] + DP[j - 3];
		printf("%d\n", DP[n]);
	}
}

'Problem Solving' 카테고리의 다른 글

[BOJ 2884] 알람 시계  (0) 2020.01.03
[BOJ 1924] 2007년  (0) 2020.01.03
[BOJ 2163] 초콜릿 자르기  (0) 2020.01.02
[BOJ 1788] 피보나치 수의 확장  (0) 2020.01.01
[BOJ 2407] 조합  (0) 2020.01.01