문제
정수 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의 합으로 나타내는 방법의 수를 출력한다.
해결 방법
- 다이나믹 프로그래밍 문제
- n을 1,2,3의 합으로만 나타냄
- n이 1일 때부터 계속 합으로 나타낼 수 있는 방법을 써봄
- 점화식 d[n] = d[n-1]+d[n-2]+d[n-3]이 나옴
- d[1], d[2], d[3] 일 때 방법의 수는 구할 수 있음
public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); int n = Integer.parseInt(br.readLine()); for(int i=0; i<n; i++) { int m = Integer.parseInt(br.readLine()); int[] dp = new int[11]; dp[1] = 1; dp[2] = 2; dp[3] = 4; for (int j = 4; j <= m; j++) { dp[j] = dp[j - 1] + dp[j - 2] + dp[j - 3]; } bw.write(dp[m] + "\n"); } bw.flush(); bw.close(); }
'algorithm' 카테고리의 다른 글
| [BOJ] 2164. 카드2 (0) | 2022.10.28 |
|---|---|
| [BOJ] 10845. 큐 (0) | 2022.10.28 |
| [BOJ] 10819. 차이를 최대로 (0) | 2022.10.27 |
| [BOJ] 9935. 문자열 폭발 (0) | 2022.10.21 |
| [BOJ] 1764. 듣보잡 (0) | 2022.10.21 |