๋ฌธ์
https://www.acmicpc.net/problem/17404
๋ด ๋ฌธ์ ํ์ด
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int n;
static int[][] r, g, b;
static int answer = Integer.MAX_VALUE;
public static void first(int red, int green, int blue) {
for(int i = 0; i < 3; i++) {
r[0][i] = Integer.MAX_VALUE - 1000;
g[0][i] = Integer.MAX_VALUE - 1000;
b[0][i] = Integer.MAX_VALUE - 1000;
}
r[0][0] = red;
g[0][1] = green;
b[0][2] = blue;
}
public static void middle(int i, int red, int green, int blue) {
r[i][0] = red + Math.min(r[i-1][1], r[i-1][2]);
r[i][1] = green + Math.min(r[i-1][0], r[i-1][2]);
r[i][2] = blue + Math.min(r[i-1][0], r[i-1][1]);
g[i][0] = red + Math.min(g[i-1][1], g[i-1][2]);
g[i][1] = green + Math.min(g[i-1][0], g[i-1][2]);
g[i][2] = blue + Math.min(g[i-1][0], g[i-1][1]);
b[i][0] = red + Math.min(b[i-1][1], b[i-1][2]);
b[i][1] = green + Math.min(b[i-1][0], b[i-1][2]);
b[i][2] = blue + Math.min(b[i-1][0], b[i-1][1]);
if(i == n-1) findAnswer();
}
public static void findAnswer() {
answer = Math.min(answer, Math.min(r[n-1][1], r[n-1][2]));
answer = Math.min(answer, Math.min(g[n-1][0], g[n-1][2]));
answer = Math.min(answer, Math.min(b[n-1][0], b[n-1][1]));
System.out.println(answer);
}
public static void main(String[] args) throws Exception {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
n = Integer.parseInt(in.readLine());
r = new int[n][3];
g = new int[n][3];
b = new int[n][3];
for(int i = 0; i < n; i++) {
st = new StringTokenizer(in.readLine());
int red = Integer.parseInt(st.nextToken());
int green = Integer.parseInt(st.nextToken());
int blue = Integer.parseInt(st.nextToken());
if(i == 0) { // ์ฒซ ๋ฒ์งธ ์ง์ ๊ฐ๊ฐ ๋นจ๊ฐ, ์ด๋ก, ํ๋์ผ๋ก ํฝ์คํด์ ์๊ฐํด์ฃผ๊ธฐ
first(red, green, blue);
} else { // ๋ ๋ฒ์งธ ~ ๋ง์ง๋ง ์ง
middle(i, red, green, blue);
}
}
}
}
๐ DP ๋ฌธ์
์ด ๋ฌธ์ ๋ RGB ๊ฑฐ๋ฆฌ ๋ฌธ์ ์ ๊ฑฐ์ ๋์ผํ๋ฐ, ํ ๊ฐ์ง ์ฐจ์ด์ ์ด ์๋ค๋ฉด,
์ง์ ์ฌ์ดํด์ฒ๋ผ ์๊ฐํ์ฌ ์ฒซ ๋ฒ์งธ ์ง๊ณผ ๋ง์ง๋ง ์ง๋ ๊ฐ์ ์์ด ๋์ง ๋ชปํ๋๋ก ํด์ผ ํ๋ค๋ ๊ฒ!
๋ฐ๋ผ์ r, g, b 2์ฐจ์ ๋ฐฐ์ด์ ๋ง๋ค๊ณ ,
๊ฐ๊ฐ ์ฒซ ๋ฒ์งธ ์ง์ด ๋นจ๊ฐ์, ์ด๋ก์, ํ๋์์ธ ๊ฒฝ์ฐ๋ก ํฝ์คํด์ฃผ๊ณ ๋ฐฐ์ด์ ์ฑ์๋๊ฐ๋ค.
๋ ๋ฒ์งธ ์ง ๋ถํฐ๋ RGB ๊ฑฐ๋ฆฌ ๋ฌธ์ ์ ๋์ผํ๊ฒ,
r, g, b ๋ฐฐ์ด์ด ๊ฐ๊ฐ ํ์ฌ ๋นจ๊ฐ, ์ด๋ก, ํ๋์ผ๋ก ์น ํ๋ค๋ ๊ฒ์ ๊ฐ์ ํ๊ณ
์ด์ ์ง์ ๊ฐ๋ฅํ ์ ์ค ๊ฐ์ฅ ์ต์ ๋น์ฉ์ด ๋ฐ์ํ๋ ์์ ์ ํํ๋ ์์ผ๋ก ํด์ฃผ์ด์ผ ํ๋ฏ๋ก
์ฒซ ๋ฒ์งธ ์ง์ ํฝ์ค ๋ ์์ ์ ์ธํ ๋๋จธ์ง ์์ ์๋ฆฌ๋ ๋ชจ๋ Integer.MaxValue๋ก ์ฑ์ ๋ค.
(-1000์ ํด์ค ์ด์ ๋, ๋ฌธ์ ์์ ์ฃผ์ด์ง ์ต๋ ๋น์ฉ์ด 1000 ์ด๋ฏ๋ก
MaxValue ๊ฐ์ ์๋ก์ด ๋น์ฉ์ ๋ํ๋๋ผ๋ ๊ฐ์ด ๋์ด๊ฐ์ ์์๊ฐ ๋์ง ์๋๋ก ํด์ฃผ๊ธฐ ์ํจ)
๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง ์ง๊น์ง ๋ชจ๋ ์น ํ๋ฉด,
r, g, b ๊ฐ๊ฐ ์ฒซ ๋ฒ์งธ ์ง์ ์น ํ ์์ ์ ์ธํ ๋๋จธ์ง ์ ์ค ์ต์ ๊ฐ์ ๊ณจ๋ผ ๊ฒฐ๊ณผ๋ฅผ ๋์ถํ๋ค.
โ๏ธ ์๋ ์์ ์ ๊ฒฐ๊ณผ ๋์ถ ๊ณผ์ ์ ๊ทธ๋ฆผ์ผ๋ก ์ค๋ช ํ๋ค.
3
26 40 83
49 60 57
13 89 99
๐ก ํผ๋๋ฐฑ
- RGB ๊ฑฐ๋ฆฌ ๋ฌธ์ ๋ฅผ ํ์ด๋ดค๊ธฐ ๋๋ฌธ์ ์ฝ๊ฒ ํ์ด๊ฐ ๊ฐ๋ฅํ๋ค.
- ๊ทธ๋ฌ๋ ํจ์จ์ ์ผ๋ก ํผ๊ฑด ์๋๊ฒ๊ฐ์์,!!! ๋ค๋ฅธ ํ์ด๋ค์ ๋ณด๊ณ ๊ณต๋ถ ํด๋ด์ผ๊ฒ ๋น.
'2๏ธโฃ Java > Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java Algorithm] ์ค๋์ฟ BOJ #2239 (0) | 2022.10.04 |
---|---|
[Java Algorithm] ๋ฒฝ๋ ๊นจ๊ธฐ SWEA #5656 (1) | 2022.10.04 |
[Java Algorithm] ํ์ดํ ์ฎ๊ธฐ๊ธฐ 2 BOJ #17069 (0) | 2022.09.30 |
[Java Algorithm] ํ์ดํ ์ฎ๊ธฐ๊ธฐ 1 BOJ #17070 (2) | 2022.09.30 |
[Java Algorithm] ์ธ๊ตฌ ์ด๋ BOJ #16234 (0) | 2022.09.22 |
๋๊ธ