๋ฌธ์ ์๊ฐ
๐ฅ ๋ฌธ์ ๋ ๋ฒจ : ์ค๋ฒ3
๐ ๋ฌธ์ ์ ํ : ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ
๐ฌ ํ์ด ์ธ์ด : JAVA
โฑ๏ธ ํ์ด ์๊ฐ : 30๋ถ
๐๏ธ ๋ฌธ์ ๋งํฌ : ๋ฐฑ์ค ๋ฌธ์ ๋งํฌ
๐ ๋ฌธ์
์ ์ 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์ ํฉ์ผ๋ก ๋ํ๋ด๋ ๋ฐฉ๋ฒ์ ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
๐ค ๋ฌธ์ ๋ถ์
๋ฌธ์ ์์ ์ธ๊ธํ ๊ฒ๊ณผ ๊ฐ์ด 1, 2, 3๋ง์ ์ฌ์ฉํด์ ๊ฐ์ ํํํ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํด์ผ ํ๋ค.
0๋ถํฐ 3๊น์ง ๊ฐ๊ฐ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ฅผ ํ์ธํด๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
| ๊ตฌ๋ถ | ๊ฒฝ์ฐ์ ์ | ์กฐํฉ |
|---|---|---|
| 1 | 1๊ฐ | 1 |
| 2 | 2๊ฐ | 1 + 1 / 2 |
| 3 | 4๊ฐ | 1 + 1 + 1 / 1 + 2 / 2 + 1 / 3 |
1, 2, 3์ ์ด์ฉํด 4๋ฅผ ๋ง๋ค ์ ์๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
- 1์ ์ด์ฉํ ์กฐํฉ : 1๊ฐ
- 2์ ์ด์ฉํ ์กฐํฉ : 2๊ฐ
- 3์ ์ด์ฉํ ์กฐํฉ : 4๊ฐ
4 + 2 + 1๋ก ์ด 7๊ฐ์ ๊ฒฝ์ฐ์ ์๋ก ๊ตฌํ ์ ์๋ค.
5์ ๊ฒฝ์ฐ๋ฅผ ๋ณด๋ฉด ์๋๋ก ๋๋ ์ ์๋ค.
- 2์ ์ด์ฉํ ์กฐํฉ : 2๊ฐ
- 3์ ์ด์ฉํ ์กฐํฉ : 4๊ฐ
- 4๋ฅผ ์ด์ฉํ ์กฐํฉ : 7๊ฐ
์ฆ, (n - 3) + (n - 2) + (n - 1)์ ํตํด ๊ฐ์ ๊ตฌํ ์ ์๋ค.
1, 2, 3์ ๋ํ ๊ฐ์ด ํ์ํ๋ฏ๋ก ๋ฏธ๋ฆฌ ๊ฐ์ ๋ฉ๋ชจ์ ์ด์ (memoization)์ ํ ๋ค, ํ์ดํด์ผ ํ๋ค.
๐ ์ต์ข ์ฝ๋
๋ฉ๋ชจ๋ฆฌ : 11480 KB
์๊ฐ : 76 ms
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
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 T = Integer.parseInt(br.readLine());
int[] dp;
while (T-- > 0) {
int n = Integer.parseInt(br.readLine());
// n์ ๊ฐ์ 11 ๋ฏธ๋ง์ด๋ผ๊ณ ๋์ด์๊ธฐ ๋๋ฌธ์ 11๋ก ์ด๊ธฐํ
dp = new int[11];
dp[0] = 0;
dp[1] = 1;
dp[2] = 2;
dp[3] = 4;
for (int i = 4; i <= n; i++) {
dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3];
}
bw.append(dp[n] + "\n");
}
bw.flush();
bw.close();
br.close();
}
}'PS > DP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [๋ฐฑ์ค][Kotlin] - ์ค์์น(30460) (0) | 2025.12.13 |
|---|