문제
정수 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의 합으로 나타내는 방법의 수를 출력한다.
문제 풀이
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | import java.util.*; import java.lang.*; import java.io.*; public class Main { static int[] d; public static void main(String[] args) { // TODO Auto-generated method stub // your code goes here //정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지 이다. Scanner sc = new Scanner(System.in); int test = sc.nextInt(); //d[n] = d[n-1] + d[n-2]; //테스트 케이스를 받아야함 for(int i=0 ; i< test ; i++){ int n = sc.nextInt(); if( (n < 11) & (n > 0)){ d = new int[n+1]; System.out.println(go(n)); } } } public static final int go(int n){ if ( d[n]>0 ) return d[n]; for(int i=0; i<=n; i++){ if (i == 0){ d[i] = 0; continue; } if (i == 1){ d[i] = 1; continue; } if (i == 2){ d[i] = 2; continue; } if (i == 3 ){ d[i] = 4; continue; } d[i] = d[i-1] + d[i-2] + d[i-3]; } return d[n]; } } | cs |
'알고리즘 문제 (백준저지) > DP' 카테고리의 다른 글
[백준/11057] 오르막 수 (Java/코드) (0) | 2018.11.20 |
---|---|
[백준/10844] 쉬운 계단 수 (Java/코드) (0) | 2018.11.20 |
[백준/2193] 이친수 (Java/코드) (0) | 2018.11.20 |
[백준/-] 붕어빵 판매하기 (0) | 2018.11.20 |
[백준/11726] 2xn 타일링 (Java/코드) (0) | 2018.11.20 |