정수 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보다 작다.
각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다.
DP
복잡한 문제를 작은 하위 문제로 나누고, 이전에 계산했던 부분 문제의 답을 저장해두었다가 재활용하여 중복 계산을 피하고 효율적으로 최적의 해답을 찾아내는 알고리즘 설계 기법이자 문제 해결 방식
일단 5까지는 직접 세어 봤다.
1 = 1
2 = 2
3 = 4
4 = 7
5 = 13
이걸 활용해야겠다고 생각하였다..!
테스트 케이스를 받는다
|
1,2,3의 개수를 디폴트로 받는다
|
4부터 미리 계산해둔다
|
입력받은 값n에 해당되는 개수를 출력한다.
package Sutdy;
import java.util.Scanner;
public class Beak9095_DP {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
int[] count = new int[12];
count[1] = 1;
count[2] = 2;
count[3] = 4;
for (int i = 4; i <= 11; i++) {
count[i] = count[i - 1] + count[i - 2] + count[i - 3];
}
for (int i = 0; i < T; i++) {
int n = sc.nextInt();
System.out.println(count[n]);
}
}
}