정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다.
정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오.
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. n은 양수이며 11보다 작다.
각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다.
n = (n - 1) + 1 = (n - 2) + 2 = (n - 3) + 3 으로 나타낼 수 있다.
위의 식은 즉, n을 1, 2, 3 으로 나타내기 위해서는 직전의 세개의 항으로 점화식을 세울 수 있다는 것이다.
따라서 dp[n] 은 n 을 1, 2, 3의 합으로 나타내는 가짓수라고 했을 때, dp[n] = dp[n-1] + dp[n-2] + dp[n-3] 이 성립한다.
package minsung.week11;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Baekjoon_9095 {
static int[] dp = new int[12];
public static void main(String[] args) throws IOException {
dp[0] = 1;
dp[1] = 1;
dp[2] = 2;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int t = Integer.parseInt(br.readLine());
for (int i = 0; i < t; i++) {
int n = Integer.parseInt(br.readLine());
System.out.println(getCnt(n));
}
}
public static int getCnt(int n){
if(dp[n] == 0){
dp[n] = getCnt(n - 1) + getCnt(n - 2) + getCnt(n - 3);
}
return dp[n];
}
}