Skip to content

Commit 6248b1c

Browse files
committed
[Silver I] Title: 1, 2, 3 더하기 5, Time: 144 ms, Memory: 20116 KB -BaekjoonHub
1 parent 634b89d commit 6248b1c

File tree

2 files changed

+79
-0
lines changed

2 files changed

+79
-0
lines changed
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import java.io.*;
2+
import java.util.*;
3+
4+
public class Main {
5+
static int MOD = 1000000009;
6+
7+
public static void main(String[] args) throws Exception {
8+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
9+
int T = Integer.parseInt(br.readLine());
10+
int maxN = 0;
11+
12+
List<Integer> input = new ArrayList<>();
13+
for(int t = 0; t < T; t++) {
14+
int N = Integer.parseInt(br.readLine());
15+
maxN = Math.max(maxN, N);
16+
input.add(N);
17+
}
18+
19+
long dp[][] = new long[maxN + 1][4];
20+
21+
// 초기값 설정
22+
dp[1][1] = 1;
23+
dp[2][2] = 1;
24+
dp[3][1] = 1;
25+
dp[3][2] = 1;
26+
dp[3][3] = 1;
27+
28+
// DP 계산
29+
for(int i = 4; i <= maxN; i++) {
30+
dp[i][1] = (dp[i-1][2] + dp[i-1][3]) % MOD;
31+
dp[i][2] = (dp[i-2][1] + dp[i-2][3]) % MOD;
32+
dp[i][3] = (dp[i-3][1] + dp[i-3][2]) % MOD;
33+
}
34+
35+
StringBuilder sb = new StringBuilder();
36+
for(int now : input) {
37+
long answer = (dp[now][1] + dp[now][2] + dp[now][3]) % MOD;
38+
sb.append(answer).append("\n");
39+
}
40+
41+
System.out.print(sb);
42+
}
43+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# [Silver I] 1, 2, 3 더하기 5 - 15990
2+
3+
[문제 링크](https://www.acmicpc.net/problem/15990)
4+
5+
### 성능 요약
6+
7+
메모리: 20116 KB, 시간: 144 ms
8+
9+
### 분류
10+
11+
다이나믹 프로그래밍
12+
13+
### 제출 일자
14+
15+
2025년 11월 25일 13:28:15
16+
17+
### 문제 설명
18+
19+
<p>정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 3가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다. 단, 같은 수를 두 번 이상 연속해서 사용하면 안 된다.</p>
20+
21+
<ul>
22+
<li>1+2+1</li>
23+
<li>1+3</li>
24+
<li>3+1</li>
25+
</ul>
26+
27+
<p>정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오.</p>
28+
29+
### 입력
30+
31+
<p>첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. n은 양수이며 100,000보다 작거나 같다.</p>
32+
33+
### 출력
34+
35+
<p>각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 1,000,000,009로 나눈 나머지를 출력한다.</p>
36+

0 commit comments

Comments
 (0)