DP - Dynamic Programming
๐ค DP ๋?
- Dynamic Programming(๋์ ๊ณํ๋ฒ)
์ฌ์ค ์ด๋ฆ์ ๋ฉ์์ด ๋ณด์ฌ์ ์ง์ ๊ฒ์ด๋ผ๊ณ ํ๋ค.
- ๋ณต์กํ ๋ฌธ์ ๋ฅผ ์ฌ๊ท์ ์ผ๋ก ๋๋์ด ํด๊ฒฐํ๋ ๋ฐฉ์
- ๊ฐ ํ์ ๋ฌธ์ ์ ํด๊ฒฐ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํด๋๊ณ ํ์ํ ๋ ๋ค์ ์ฌ์ฉ(๋ฉ๋ชจ์ ์ด์ )ํ์ฌ ํจ์จ์ ์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
- ์ฌ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๊ณ์ฐ์ ์ค๋ณต์ ํผํ์ฌ ์ข์ ์ฑ๋ฅ์ ๋ณด์ธ๋ค.
- ํต์ฌ์ ํฐ ๋ฌธ์ ๋ฅผ ์์ ๋ฌธ์ ๋ก ์ชผ๊ฐ์ ๊ทธ ๋ต๋ค์ ์ ์ฅํด๋๊ณ ์ฌํ์ฉํ๋ ๊ฒ์ด๋ค.
๐คจ ์ฌ๊ท์์ ์ฐจ์ด
- ์ฌ๊ท ๋ํ ๋ง์ฐฌ๊ฐ์ง๋ก ์์ ๋ฌธ์ ๋ก ์ชผ๊ฐ์ ํ์ด๋๊ฐ์ง๋ง ๊ธฐ์กด ๋ต์
์ฌํ์ฉ
ํ์ง ์๋๋ค๋ ์ฐจ์ด๊ฐ ์๋ค. - ํผ๋ณด๋์น ์์ด์ ์๋ก ์ฌ๊ท๋ก ํจ์๋ฅผ ๊ตฌ์ฑํ๋ฉด
f(n) = f(n-1) + f(n-2)
์ด๋ค. - ๋ง์ฝ 100๋ฒ์งธ ํผ๋ณด๋์น ์๋ฅผ ๊ตฌํ๋ ค๋ฉด
f(1)
์ ํธ์ถ ํ์๋ ์ธ๊ธฐ ํ๋ค ์ ๋๋ก ๊ต์ฅํ ๋ง๋ค. - ๋ฐ๋ฉด์ DP๋ก ๊ตฌํ๋ฉด
f(1)
์ ํธ์ถ ํ์๋ ๋จ ํ๋ฒ์ด๋ค.
๐ค DP์ ์ฌ์ฉ ์กฐ๊ฑด
- DP๋ฅผ ์ ์ฉํ๋ ค๋ฉด ๋ค์ 2๊ฐ์ง ์กฐ๊ฑด์ ๋ง์กฑํด์ผ ํ๋ค.
- Overlapping Subproblems(๊ฒน์น๋ ๋ถ๋ถ ๋ฌธ์ )
- Optimal Substructure(์ต์ ๋ถ๋ถ ๊ตฌ์กฐ)
[Overlapping Subproblems(๊ฒน์น๋ ๋ถ๋ถ ๋ฌธ์ )]
- DP๋ ๋ฌธ์ ๋ฅผ ๋๋๊ณ ๊ทธ ๋ฌธ์ ์ ๊ฒฐ๊ณผ ๊ฐ์ ์ฌํ์ฉํด์ ์ ์ฒด ๋ต์ ๊ตฌํ๋ค. ๋ฐ๋ผ์ ์ฌํ์ฉํ๊ธฐ ์ํด์ ๋์ผํ ์์ ๋ฌธ์ ๋ค์ด ๋ฐ๋ณตํ์ฌ ๋ํ๋์ผ ํ๋ค.
- ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋์ผํ ๋ถ๋ถ ๋ฌธ์ ๊ฐ ์ค๋ณต๋์ด์ ๋ํ๋์ผ ํ๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ์ ์ ์ฅ๋ ๊ฐ์ ์ฌํ์ฉ ํ ์ ์๊ณ DP๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
[Optimal Substructure(์ต์ ๋ถ๋ถ ๊ตฌ์กฐ)]
- ์ ๊ทธ๋ฆผ์์ ์์ธ์์ ๋ถ์ฐ๊น์ง ์ ์ผ ์งง์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๊ธฐ ์ํด์๋ ์์ธ-๋์ ๊ฑฐ๋ฆฌ์ ์ต์๊ฐ, ๋์ -๋ถ์ฐ ๊ฑฐ๋ฆฌ์ ์ต์๊ฐ์ ๊ฐ๊ฐ ๊ตฌํ์ฌ ํฉ์น๋ฉด ๋๋ค.
- ์ด๋ ๊ฒ ๋ถ๋ถ ๋ฌธ์ ์ ์ต์ ๊ฒฐ๊ณผ ๊ฐ์ด ์ ์ฒด ๋ฌธ์ ์ ์ต์ ๊ฒฐ๊ณผ๋ฅผ ๋ผ ์ ์๋ ๊ฒฝ์ฐ๋ฅผ
์ต์ ๋ถ๋ถ ๊ตฌ์กฐ
๋ผ๊ณ ํ๋ค.
๐ค DP๋ ์ด๋ป๊ฒ ํ์ด์ผํ๋๊ฐ
- ์ฝ๋ฉํ
์คํธ์์ DP๋ ์ด๋ป๊ฒ ํ์ด์ผ ํ ๊น?
DP ๋ฌธ์ ์์ ์์์ฐจ๋ฆฌ๊ธฐ, ๊ตฌํ ๋ฐฉ์ ๋ฑ์ ๋์ด๊ฐ๊ฒ ๋ค.
- ์ ์ ๊ณต์ฑ ์ฝ๋ฉํ ์คํธ์ ๊ฒฝ์ฐ ๋ฌธ์ ๋ค์ ๋์ด๋๋ ์๋ฌด๋ฆฌ ๋์๋ ๊ณจ๋ 1์ด๊ณ , DP ๋ฌธ์ ๋ค์ ๊ฒฝ์ฐ ๊ณจ๋3 ์ ๋๊ฐ ์ต๋์ธ ๊ฒ ๊ฐ๋ค.
- DP ๋ฌธ์ ๋ค์ ํต์ฌ์ ์ ํ์์ ์ฐพ์ ์ ์๋์ง ์ฌ๋ถ์ด๋ค.
- ์ฝ๋ฉํ ์คํธ ํ๊ฒฝ์์ ๋ ธํธ๋ก ํ๊ธฐํ๋ ๊ฒ์ ํ์ฉ๋๋ฏ๋ก DP ๋ฌธ์ ์์ ์ ์๊ฐ๋ถํฐ ๋ ธํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ง์ ๊ฒฝ์ฐ๋ฅผ ๋ฐ์ ธ๋ณด๋๊ฒ ๊ฐ์ฅ ๋น ๋ฅธ ํด๊ฒฐ๋ฒ์ด๋ผ๊ณ ๋ณธ๋ค.
- ๊ฐ์ฅ ๊ฐ๋จํ ๊ฒฝ์ฐ๋ถํฐ 4~5๊ฐ ์ ๋์ ๊ฒฝ์ฐ๋ฅผ ์ฐจ๋ก๋๋ก ๋ฐ์ ธ๋ณด๊ณ ์ ํ์์ ๊ตฌํ๋ค์ ์ฝ๋์ ๋ น์ฌ๋ด๋ ์ฐ์ต์ ํ๋ค๋ฉด ์ค์ ์์ ํฐ ๋ฌธ์ ์์ด ํด๊ฒฐํ ์ ์๋ค๊ณ ์๊ฐํ๋ค.
BOJ 2133 - ํ์ผ ์ฑ์ฐ๊ธฐ (๊ณจ๋ 4)
- 3xN ํฌ๊ธฐ์ ๋ฒฝ์ 2x1, 1x2 ๋ ์ข ๋ฅ์ ํ์ผ๋ก ์ฑ์ธ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค.
- n์ด ํ์์ธ ๊ฒฝ์ฐ ๋ฒฝ์ ํฌ๊ธฐ 3xn ๋ ํ์์ด๋ฏ๋ก ํฌ๊ธฐ๊ฐ 2์ธ ํ์ผ๋ค๋ก๋ ์ฑ์ธ ์ ์์ผ๋ฏ๋ก ๊ฒฝ์ฐ์ ์๋ 0์ด๋ค.
- n = 2, 4, 6, 8 ์ผ ๋์ ๊ฒฝ์ฐ์ ์๋ฅผ ์ง์ ๋ฐ์ ธ๋ณธ๋ค.
[n=2]
- n=2 ์ธ ๊ฒฝ์ฐ ์ ๊ทธ๋ฆผ์ฒ๋ผ 3๊ฐ์ง ๊ฒฝ์ฐ๋ฐ์ ์๋ค.
[n=4]
- n=2์ธ ๊ฒฝ์ฐ๋ฅผ ์ด์ด๋ถ์ธ ๊ฒฝ์ฐ 9๊ฐ์ง
- ์ด์ ํด๋น๋์ง ์๋ ์์ธ ๊ฒฝ์ฐ 2๊ฐ์ง
- ์ด 11๊ฐ์ง๊ฐ ๋์จ๋ค.
[n=6]
- n=4์ธ ๊ฒฝ์ฐ์์ n=2์ธ ๊ฒฝ์ฐ๋ฅผ ๊ณฑํ 33๊ฐ์ง
- n=4์ ์์ธ ๊ฒฝ์ฐ์ n=2 ๊ฒฝ์ฐ๋ฅผ ๊ณฑํ 6๊ฐ์ง
- n=6์ ์๋ก์ด ์์ธ 2๊ฐ์ง
- ์ด 41๊ฐ์ง๊ฐ ๋์จ๋ค.
- ์ ์ ๊ท์น์ด ๋ณด์ด๋ ๊ฒ ๊ฐ๋ค.
[n=8]
- n=6์ธ ๊ฒฝ์ฐ์์ n=2์ธ ๊ฒฝ์ฐ๋ฅผ ๊ณฑํ 123๊ฐ์ง
- n=4์ ์์ธ ๊ฒฝ์ฐ์ n=4 ๊ฒฝ์ฐ๋ฅผ ๊ณฑํ 22๊ฐ์ง
- n=6์ ์์ธ ๊ฒฝ์ฐ์ n=2 ๊ฒฝ์ฐ๋ฅผ ๊ณฑํ 6๊ฐ์ง
- n=8์ ์๋ก์ด ์์ธ 2๊ฐ์ง
- ์ด 153๊ฐ์ง๊ฐ ๋์จ๋ค.
๊ท์น ์ ๋ฆฌ
- n-2 ๊ฒฝ์ฐ์ ์์ n=2์ธ ๊ฒฝ์ฐ์ ์(3)์ ๊ณฑํ ๊ฒฝ์ฐ์ ์๊ฐ ๋์จ๋ค.
- ์ด์ ๊ฒฝ์ฐ๋ค์์ ๋ฐ์ํ ์์ธ ๊ฒฝ์ฐ๋ค์ ๋น ๊ณต๊ฐ์ ๊ณฑํ ๊ฒฝ์ฐ์ ์๊ฐ ๋์จ๋ค.
- n >= 4 ์์ ๋งค๋ฒ ์๋ก์ด ์์ธ 2๊ฐ์ง๊ฐ ๋์จ๋ค.
- ์ด๋ฅผ ์์ผ๋ก ์ ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
- f(n-2) * 3
- f(n-4) * 2 + f(n-6) * 2 + ... + f(2) * 2
- 2
f(n) = 3f(n-2) + 2(f(n-4)+...+f(2)) + 2 (n>=4)
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import java.io.*;
import java.util.*;
public class Main {
static FastReader scan = new FastReader();
static StringBuilder sb = new StringBuilder();
static int n;
static int[] dp;
public static void main(String[] args) {
input();
solve();
}
static void input() {
n = scan.nextInt();
}
static void solve() {
if (n == 1) {
System.out.println(0);
return;
}
dp = new int[n+1];
dp[0] = 0;
dp[1] = 0;
dp[2] = 3;
for (int i = 3; i <= n; i++) {
if (i % 2 == 1) {
dp[i] = 0;
}else{
dp[i] += 2 + dp[i - 2] * 3;
for (int j = i-4; j >= 2; j -= 2) {
dp[i] += dp[j]*2;
}
}
}
System.out.println(dp[n]);
}
static class FastReader {
.
.
.
}
}
FastReader
DP๋ฅผ ์ฌ์ฉํ๋ ๋ฌธ์ ๋ฆฌ์คํธ
- 2839 - ์คํ ๋ฐฐ๋ฌ (์ค๋ฒ 4)
- 1003 - ํผ๋ณด๋์น ํจ์ (์ค๋ฒ 3)
- 2579 - ๊ณ๋จ ์ค๋ฅด๊ธฐ (์ค๋ฒ 3)
- 9461 - ํ๋๋ฐ ์์ด (์ค๋ฒ 3)
- 12865 - ํ๋ฒํ ๋ฐฐ๋ญ (๊ณจ๋ 5)
- 2293 - ๋์ 1 (๊ณจ๋ 5)
- 11054 - ๊ฐ์ฅ ๊ธด ๋ฐ์ดํ ๋ ๋ถ๋ถ ์์ด (๊ณจ๋ 4)
๋๊ตฐ๊ฐ๊ฐ ๋ฌผ์ด๋ณธ๋ค๋ฉด
DP๋ ํ์ ๋ฌธ์ ์ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฌ์ฉํ์ฌ ์ ์ฒด ๋ฌธ์ ์ ๊ฒฐ๊ณผ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ตฌํ ์ ์๋ ๊ธฐ๋ฒ์
๋๋ค.
This post is licensed under CC BY 4.0 by the author.