boj)9095 - 1, 2, 3 더하기
2020. 9. 16. 18:56ㆍPS/boj
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// # 1, 2, 3 더하기
public class boj_9095 {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static int[] dp = new int[11];
public static void main(String[] args) throws IOException {
int t = Integer.parseInt(br.readLine());
dp[1] = 1; dp[2] = 2; dp[3] = 4;
for (int i = 4; i <= 10; i++) {
dp[i] = dp[i-1] + dp[i-2] + dp[i-3];
}
for (int i = 0; i < t; i++) {
int n = Integer.parseInt(br.readLine());
System.out.println(dp[n]);
}
}
}
- dp는 쪼개고 점화식 !
- n을 1, 2, 3을 더해서 만드는 방법의 수
- x + x + x + .... ? = n -> 여기서 ? 자리에 올 수 있는 수는 1, 2,3 밖에 없다.
- 1이 왔을 경우 dp[n-1]
- 2가 왔을 경우 dp[n-2]
- 3이 왔을 경우 dp[n-3]
- ex 4
- 마지막이 1이 라는 것은 3을 만드는 경우의 수에 마지막에 1을 붙인것과 같음 -> dp[3]
- 마지막이 2라는 것은 2를 만드는 경우의 수에 마지막에 2를 붙인것과 같음 -> dp[2]
- 3이라는 것은 1을 만드는 경우의 수에 마지막에 3을 붙인것과 같음 -> dp[1]
- dp[n] = dp[n-1] + dp[n-2] + dp[n-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
|
import java.io.*;
public class boj_9095 {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
public static void main(String[] args) throws IOException {
int t = Integer.parseInt(br.readLine());
for (int i = 0; i < t; i++) {
int k = Integer.parseInt(br.readLine());
System.out.println(go(0, k));
}
}
static int go(int sum, int goal) {
if (sum > goal) return 0;
if (sum == goal) return 1;
int now = 0;
for (int i = 1; i <= 3; i++) {
now += go(sum + i, goal);
}
return now;
}
}
|
cs |
- 20.12.01 추가
- 재귀
- 재귀를 이용해서 다시 풀이
'PS > boj' 카테고리의 다른 글
boj)16194 - 카드 구매하기 2 (0) | 2020.09.17 |
---|---|
boj)11052 - 카드 구매하기 (0) | 2020.09.17 |
boj)11727 - 2xn 타일링 2 (0) | 2020.09.16 |
boj)11726 - 2xn 타일링 (0) | 2020.09.16 |
boj)1463 - 1로 만들기 (0) | 2020.09.16 |