Algorithm/Dynamic Programming
[Java] 백준(Baekjoon) 9095. 1, 2, 3 더하기
_dear
2024. 1. 23. 13:53
https://www.acmicpc.net/problem/9095
9095번: 1, 2, 3 더하기
각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다.
www.acmicpc.net
풀이
1. 1 을 나타내는 방법
-> 1
1-2. 2를 나타내는 방법 -> 2
- 2
- 1+1
1-3. 3을 나타내는 방법 -> 4
- 3
- 1+2
- 2+1
- 1+1+1
2. 4를 나타내는 방법
- 1+1+1+1
- 1+1+2
- 1+2+1
- 2+1+1
- 2+2
- 1+3
- 3+1
-> 7개
3. 5를 나타내는 방법
- 1+1+1+1+1
- 1+1+1+2(4개)
- 1+1+3(3개)
- 2+2+1(3개)
- 2+3(2개)
-> 13개
4. 6을 나타내는 방법
- 1+1+1+1+1+1
- 1+1+1+1+2(5개)
- 1+1+1+3(4개)
- 1+2+3(6개) 3 2 1 1 3 2 2 3 1 등
- 1+1+2+2(6개)
- 2+2+2
- 3+3
-> 24개
5. 7을 나타내는 방법
- 1+1+1+1+1+1+1
- 1+1+1+1+1+2(6개)
- 1+1+1+1+3(5개)
- 1+1+1+2+2(10개)
- 1+1+2+3(12개)
- 1+3+3(3개)
- 2+2+3(3개)
=> 40
44?
1 2 4 7 13 24 44
dp [n] = dp [n-1] + dp [n-2] + dp [n-3]
package dp;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Ex9095 {
static int dp[] = new int[11]; //n<11
public static void main(String[] args) throws NumberFormatException, IOException {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
dp[1]=1;
dp[2]=2;
dp[3]=4;
for(int j=4;j<11;j++) {
dp[j]=dp[j-1]+dp[j-2]+dp[j-3];
}
int row = Integer.parseInt(br.readLine());
for(int i=0; i<row; i++) {
int num = Integer.parseInt(br.readLine());
System.out.println(dp[num]);
}
}
}