๐ ์ค๋์ ์ผ๊ธฐ
DP๋ ์ฐธ ์ด๋ ต๋ค. DP๋ ๋ณดํต ์ ํ์์ ์ฐพ์๋ด๊ธฐ๋ง ํ๋ฉด ์ฝ๋๋ก ์ฎ๊ฒจ ๊ตฌํํ๋ ์๊ฐ์ ์งง์ ํธ์ธ๋ฐ, ๊ทธ ์ ํ์์ ์ฐพ์๋ด๋ ๋ฐฉ๋ฒ์ด ์ฐ์ต ๋ง๊ณ ๋ ์๋ ๊ฒ ๊ฐ๋ค.. ๊ทธ๋์ ๋ค๋ฅธ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด๋ ๋ฐ๋ก ํฌ์คํ
์ ํ์ง ์๋ ํธ์ธ๋ฐ, DP๋ ์ํ ๋๊น์ง ํฌ์คํ
ํ๋ฉด์ ์ ๋ฆฌํด์ผ ํ ๊ฒ ๊ฐ๋ค.
9095๋ฒ: 1, 2, 3 ๋ํ๊ธฐ
๊ฐ ํ ์คํธ ์ผ์ด์ค๋ง๋ค, n์ 1, 2, 3์ ํฉ์ผ๋ก ๋ํ๋ด๋ ๋ฐฉ๋ฒ์ ์๋ฅผ ์ถ๋ ฅํ๋ค.
www.acmicpc.net
๋ฌธ์ ํ์ด
์ฒ์์ DP ํ ์ด๋ธ์ 2์ฐจ์์ ๊ตฌ์ฑํด์, 1๋ก๋ง ํด๋น ์ซ์๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒฝ์ฐ, 1๊ณผ 2๋ก ๊ตฌ์ฑํ๋ ๊ฒฝ์ฐ, 1,2,3์ผ๋ก ๊ตฌ์ฑํ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ฐ์ ธ ๋ณด์๋๋ฐ, 2์ฐจ์ ๋ฐฐ์ด ์์์ ์๋ฌด๋ฆฌ ๋ด๋ ๊ท์น์ ์ฐพ์ ์ ์์๋ค. 1์ฐจ์ ๋ฐฐ์ด๋ก DP ํ ์ด๋ธ์ ๋ค์ ๊ตฌ์ฑํด์ ๋ณด๋ ๊ท์น์ด ๋ณด์๋ค.

์์ ์ฌ์ง์ฒ๋ผ 1, 2, 3์ผ๋ก ํด๋น ์ซ์๋ฅผ ๊ตฌ์ฑํ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ชจ๋ ์ ์ด๊ฐ๋ฉฐ ๊ฐ์ง์๋ฅผ ๊ตฌํด๋ดค๋ค. ์์ ํ์์ ์ฐพ์ ๊ท์น์ i
์ ๊ฒฝ์ฐ์ ์๋ i-1
, i-2
, i-3
๋ฒ์งธ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ชจ๋ ๋ํ ์์ ๊ฐ์๋ค. ์ด๋ฅผ ๋ฐํ์ผ๋ก ์ ํ์์ ์๋์ ๊ฐ์ด ์ธ์ธ ์ ์๋ค.
dp[i] = dp[i-1] + dp[i-2] + dp[i-3]
๋ณดํต ์ ํ์์ ์ธ์ฐ๋ ๊ณผ์ ์ด๋ ํน์ ๊ท์น์ ์ฐพ์์ ์ธ์ด ํ์ ํด๋น ์์ด ์๋ฏธํ๋ ๋ฐ์ ๋ํด ์๊ฐํด ๋ณด๋ ํธ์ธ๋ฐ, ์์ ์ ํ์์ ๋ค์๊ณผ ๊ฐ์ ์๋ฏธ๋ฅผ ๋ํ๋ธ๋ค.


์์ ๊ทธ๋ฆผ์ฒ๋ผ i-1
์ ๋ชจ๋ ๊ฒฝ์ฐ์ +1
์ ํด์ค ๊ฒฝ์ฐ๋ค์ด i
๋ฒ์งธ ๊ฒฝ์ฐ์ ๊ทธ๋๋ก ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ๋ฐ๋ผ์ i-1
, i-2
, i-3
์ ๊ฐ ๊ฒฝ์ฐ์ +1
, +2
, +3
์ ํด์ ๊ทธ๋๋ก ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ์ i-1
, i-2
, i-3
์ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ํ ๊ฒ์ด i
๋ฒ์งธ์ ๊ฒฝ์ฐ์ ์๊ฐ ๋๋ค.
์๋ฅผ ๋ค์ด 5์ ๊ฒฝ์ฐ์ ์๋ ์๋์ ๊ฐ์ด ๊ตฌ์ฑ๋๋ค.
4 + 1 ๋ก ํํ ๊ฐ๋ฅ โ dp[4]
์ ๊ฒฝ์ฐ์ ์
3 + 2 ๋ก ํํ ๊ฐ๋ฅ โ dp[3]
์ ๊ฒฝ์ฐ์ ์
2 + 3 ๋ก ํํ ๊ฐ๋ฅ โ dp[2]
์ ๊ฒฝ์ฐ์ ์
์์ค ์ฝ๋
dp ํ ์ด๋ธ์ 1๋ฒ์งธ, 2๋ฒ์งธ, 3๋ฒ์งธ ๊ฐ์ ์ด๊ธฐํํด์ค ๋ค, ์ธ๋ฑ์ค 3๋ถํฐ ๋ฐ๋ณต๋ฌธ์ ํตํด dpํ ์ด๋ธ ๊ฐ์ ์ฑ์์คฌ๋ค.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int TC = Integer.parseInt(br.readLine());
int[] dp = new int[11];
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 t = 0 ; t < TC ; t++){
int num = Integer.parseInt(br.readLine());
sb.append(dp[num]).append("\n");
}
System.out.print(sb);
}
}
'๐ ์ฝํ ์ฐ์ต์ฅ > ๐ DP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] ๋ฐฑ์ค 16500_๋ฌธ์์ด ํ๋ณ (Java) (0) | 2023.07.15 |
---|---|
[Baekjoon] ๋ฐฑ์ค 2193_์ด์น์ (Java) (0) | 2023.07.09 |
๐ ์ค๋์ ์ผ๊ธฐ
DP๋ ์ฐธ ์ด๋ ต๋ค. DP๋ ๋ณดํต ์ ํ์์ ์ฐพ์๋ด๊ธฐ๋ง ํ๋ฉด ์ฝ๋๋ก ์ฎ๊ฒจ ๊ตฌํํ๋ ์๊ฐ์ ์งง์ ํธ์ธ๋ฐ, ๊ทธ ์ ํ์์ ์ฐพ์๋ด๋ ๋ฐฉ๋ฒ์ด ์ฐ์ต ๋ง๊ณ ๋ ์๋ ๊ฒ ๊ฐ๋ค.. ๊ทธ๋์ ๋ค๋ฅธ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด๋ ๋ฐ๋ก ํฌ์คํ
์ ํ์ง ์๋ ํธ์ธ๋ฐ, DP๋ ์ํ ๋๊น์ง ํฌ์คํ
ํ๋ฉด์ ์ ๋ฆฌํด์ผ ํ ๊ฒ ๊ฐ๋ค.
9095๋ฒ: 1, 2, 3 ๋ํ๊ธฐ
๊ฐ ํ ์คํธ ์ผ์ด์ค๋ง๋ค, n์ 1, 2, 3์ ํฉ์ผ๋ก ๋ํ๋ด๋ ๋ฐฉ๋ฒ์ ์๋ฅผ ์ถ๋ ฅํ๋ค.
www.acmicpc.net
๋ฌธ์ ํ์ด
์ฒ์์ DP ํ ์ด๋ธ์ 2์ฐจ์์ ๊ตฌ์ฑํด์, 1๋ก๋ง ํด๋น ์ซ์๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒฝ์ฐ, 1๊ณผ 2๋ก ๊ตฌ์ฑํ๋ ๊ฒฝ์ฐ, 1,2,3์ผ๋ก ๊ตฌ์ฑํ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ฐ์ ธ ๋ณด์๋๋ฐ, 2์ฐจ์ ๋ฐฐ์ด ์์์ ์๋ฌด๋ฆฌ ๋ด๋ ๊ท์น์ ์ฐพ์ ์ ์์๋ค. 1์ฐจ์ ๋ฐฐ์ด๋ก DP ํ ์ด๋ธ์ ๋ค์ ๊ตฌ์ฑํด์ ๋ณด๋ ๊ท์น์ด ๋ณด์๋ค.

์์ ์ฌ์ง์ฒ๋ผ 1, 2, 3์ผ๋ก ํด๋น ์ซ์๋ฅผ ๊ตฌ์ฑํ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ชจ๋ ์ ์ด๊ฐ๋ฉฐ ๊ฐ์ง์๋ฅผ ๊ตฌํด๋ดค๋ค. ์์ ํ์์ ์ฐพ์ ๊ท์น์ i
์ ๊ฒฝ์ฐ์ ์๋ i-1
, i-2
, i-3
๋ฒ์งธ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ชจ๋ ๋ํ ์์ ๊ฐ์๋ค. ์ด๋ฅผ ๋ฐํ์ผ๋ก ์ ํ์์ ์๋์ ๊ฐ์ด ์ธ์ธ ์ ์๋ค.
dp[i] = dp[i-1] + dp[i-2] + dp[i-3]
๋ณดํต ์ ํ์์ ์ธ์ฐ๋ ๊ณผ์ ์ด๋ ํน์ ๊ท์น์ ์ฐพ์์ ์ธ์ด ํ์ ํด๋น ์์ด ์๋ฏธํ๋ ๋ฐ์ ๋ํด ์๊ฐํด ๋ณด๋ ํธ์ธ๋ฐ, ์์ ์ ํ์์ ๋ค์๊ณผ ๊ฐ์ ์๋ฏธ๋ฅผ ๋ํ๋ธ๋ค.


์์ ๊ทธ๋ฆผ์ฒ๋ผ i-1
์ ๋ชจ๋ ๊ฒฝ์ฐ์ +1
์ ํด์ค ๊ฒฝ์ฐ๋ค์ด i
๋ฒ์งธ ๊ฒฝ์ฐ์ ๊ทธ๋๋ก ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ๋ฐ๋ผ์ i-1
, i-2
, i-3
์ ๊ฐ ๊ฒฝ์ฐ์ +1
, +2
, +3
์ ํด์ ๊ทธ๋๋ก ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ์ i-1
, i-2
, i-3
์ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ํ ๊ฒ์ด i
๋ฒ์งธ์ ๊ฒฝ์ฐ์ ์๊ฐ ๋๋ค.
์๋ฅผ ๋ค์ด 5์ ๊ฒฝ์ฐ์ ์๋ ์๋์ ๊ฐ์ด ๊ตฌ์ฑ๋๋ค.
4 + 1 ๋ก ํํ ๊ฐ๋ฅ โ dp[4]
์ ๊ฒฝ์ฐ์ ์
3 + 2 ๋ก ํํ ๊ฐ๋ฅ โ dp[3]
์ ๊ฒฝ์ฐ์ ์
2 + 3 ๋ก ํํ ๊ฐ๋ฅ โ dp[2]
์ ๊ฒฝ์ฐ์ ์
์์ค ์ฝ๋
dp ํ ์ด๋ธ์ 1๋ฒ์งธ, 2๋ฒ์งธ, 3๋ฒ์งธ ๊ฐ์ ์ด๊ธฐํํด์ค ๋ค, ์ธ๋ฑ์ค 3๋ถํฐ ๋ฐ๋ณต๋ฌธ์ ํตํด dpํ ์ด๋ธ ๊ฐ์ ์ฑ์์คฌ๋ค.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int TC = Integer.parseInt(br.readLine());
int[] dp = new int[11];
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 t = 0 ; t < TC ; t++){
int num = Integer.parseInt(br.readLine());
sb.append(dp[num]).append("\n");
}
System.out.print(sb);
}
}
'๐ ์ฝํ ์ฐ์ต์ฅ > ๐ DP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] ๋ฐฑ์ค 16500_๋ฌธ์์ด ํ๋ณ (Java) (0) | 2023.07.15 |
---|---|
[Baekjoon] ๋ฐฑ์ค 2193_์ด์น์ (Java) (0) | 2023.07.09 |