반응형
문제
https://www.acmicpc.net/problem/9095
풀이
1, 2, 3을 이용해서 더한 후 N을 구하는 문제이다. 마지막에 더해지는 숫자에 따라서 N을 구하는 방법을 알 수 있다.
○ + ○ + ○ + ... + ● = N 이라고 할 때, 마지막 ● 에는 1, 2, 3 세 개가 올 수 있다.
따라서 ●는 N - 1, N - 2, N - 3 중에 하나가 되고, 이 세 가지가 되는 방법의 수를 더하면 결국 N까지 더하는 방법의 수가 만들어 진다.
D[N] = N을 1, 2, 3으로 나타내는 경우의 수 라고 하면
D[N] = D[N-1] + D[N-2] + D[N-3] 이 된다.
코드
c++
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
|
#include <iostream>
using namespace std;
int T;
int dp[11];
int result;
int f(int N)
{
if (dp[N]) return dp[N];
return dp[N] = f(N - 1) + f(N - 2) + f(N - 3);
}
int main()
{
cin.tie(0);
ios::sync_with_stdio(false);
cin >> T;
dp[1] = 1;
dp[2] = 2;
dp[3] = 4;
int N;
while (T--)
{
cin >> N;
cout << f(N) << '\n';
}
return 0;
}
|
cs |
java
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
|
import java.util.Scanner;
public class Main {
static int t, n;
static Scanner sc = new Scanner(System.in);
static int[] d = new int[11];
public static void main(String[] args) {
t = sc.nextInt();
solve();
for (int i = 0; i < t; i++) {
n = sc.nextInt();
System.out.println(d[n]);
}
}
private static void solve() {
d[1] = 1;
d[2] = 2;
d[3] = 4;
for (int i = 4; i <= 10; i++) {
d[i] = d[i - 1] + d[i - 2] + d[i - 3];
}
}
}
|
cs |
반응형
'BOJ' 카테고리의 다른 글
백준 1759 - 암호 만들기 (0) | 2022.03.02 |
---|---|
백준 - 랜선 자르기 (0) | 2022.02.28 |
백준 2252 - 줄 세우기 (0) | 2022.02.22 |
백준 11725 - 트리의 부모 찾기 (0) | 2022.02.17 |
백준 10816 - 숫자 카드 2 (0) | 2022.02.05 |