https://www.acmicpc.net/problem/1149
1149๋ฒ: RGB๊ฑฐ๋ฆฌ
์ฒซ์งธ ์ค์ ์ง์ ์ N(2 ≤ N ≤ 1,000)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์๋ ๊ฐ ์ง์ ๋นจ๊ฐ, ์ด๋ก, ํ๋์ผ๋ก ์น ํ๋ ๋น์ฉ์ด 1๋ฒ ์ง๋ถํฐ ํ ์ค์ ํ๋์ฉ ์ฃผ์ด์ง๋ค. ์ง์ ์น ํ๋ ๋น์ฉ์ 1,000๋ณด๋ค ์๊ฑฐ๋
www.acmicpc.net
https://www.acmicpc.net/problem/17404
17404๋ฒ: RGB๊ฑฐ๋ฆฌ 2
์ฒซ์งธ ์ค์ ์ง์ ์ N(2 ≤ N ≤ 1,000)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์๋ ๊ฐ ์ง์ ๋นจ๊ฐ, ์ด๋ก, ํ๋์ผ๋ก ์น ํ๋ ๋น์ฉ์ด 1๋ฒ ์ง๋ถํฐ ํ ์ค์ ํ๋์ฉ ์ฃผ์ด์ง๋ค. ์ง์ ์น ํ๋ ๋น์ฉ์ 1,000๋ณด๋ค ์๊ฑฐ๋
www.acmicpc.net
์ค๋ต๋ ธํธ(ํธ๋ ๋์ ์ฌ๊ณ ๊ณผ์ ๋ฐ ๊ฐ์ ์ )
RGB๊ฑฐ๋ฆฌ๋ ๋ค์ ์ ํํ ๊ฒ ์ด์ ์ ํํ ๊ฑธ ์ ์ธํ๊ณ ๊ฐ์ฅ ์์ ๊ฑธ ์ ํํ๋ฉด ๋๋ค.
R -> ์ด์ G, B ์ค์ ํ๋๋ฅผ ํ์ฌ R์ ๋ํ๋ค.
G -> ์ด์ R, B ์ค์ ํ๋๋ฅผ ํ์ฌ G์ ๋ํ๋ค -> B๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์ ์ฉํ๋ค.
dp[i][0] = Math.min(dp[i - 1][1], dp[i - 1][2]) + in[i][0];
dp[i][1] = Math.min(dp[i - 1][0], dp[i - 1][2]) + in[i][1];
dp[i][2] = Math.min(dp[i - 1][1], dp[i - 1][0]) + in[i][2];
๊ทธ๋์ n๋ฒ์งธ dp์์ ์ ์ผ ์์ ๊ฑธ ์ ํํ๋ฉด ๋๋ค.
์ด๊ฒ RGB๊ฑฐ๋ฆฌ 1์ด๊ณ RGB๊ฑฐ๋ฆฌ 2๋ ์ฒ์ ์ ํํ ๊ฐ์ ๊ฐ์ง๊ณ ๊ฐ์ผ๋๋๋ฐ, ์กฐ๊ฑด์ด 2๊ฐ๊ฐ ํ์ํ๋ค.
1. ์ฒ์ ์ ํํ ๊ฐ๋ง ๊ฐ๊ณ ์ถ๋ฐํด์ผ๋๊ณ
2. ์ต์๊ฐ์ ์ฐพ์ ๋์์ด ์ฒ์์ ํํ ๊ฐ๊ณผ ๊ฐ์ผ๋ฉด ์๋๋ค
for (int j = 0; j < 3; j++) { //
if (j == c) {
dp[1][c] = in[1][c];
} else {
dp[1][j] = 1000000; // ์ด๊ฒ ํ์ํ ์ด์ ๋ ์์ ํฐ ๊ฐ์ผ๋ก ํด์ dp[2][]์ ๊ฒฝ์ฐ์ ๋ค๋ฅธ ์์์ด ์ ํ๋์ง์๋๋ก ํ๋ ๊ฒ
}
}
์ด๋ ์ฌ์ฉํ์ง์์ ์์ ์ง์ ์ ์ด๊ธฐํํ๋ ๊ฒ ์ค์ํ๋ค.
์ฒ์ Integer.MAX_VALUE๋ก ์ด๊ธฐํํ๋ฉด, ๋ฐ์์ RGB ๊ฑฐ๋ฆฌ 1 ํ๋ ์ฌ์ฉํ๋ ๋ก์ง์์ overflow๊ฐ ๋ฐ์ํ๋ค. ๊ทธ๋์ ์ต๋๊ฐ์ด์ด์ ์ ํํ์ง์๋ ๊ฒ ์๋๋ผ, -21์ต์ด ๋ผ์ ์ต์ข ์ ์ผ๋ก -21์ต์ด ๋์๋ฒ๋ฆฐ๋ค.
์ ๋ต์ฝ๋
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
//System.setIn(new FileInputStream("res/boj.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = null; // new StringTokenizer(br.readLine(), " ");
int n = Integer.parseInt(br.readLine());
int[][] in = new int[n + 1][3];
for (int i = 1; i <= n; i++) {
st = new StringTokenizer(br.readLine(), " ");
in[i][0] = Integer.parseInt(st.nextToken());
in[i][1] = Integer.parseInt(st.nextToken());
in[i][2] = Integer.parseInt(st.nextToken());
}
// ์
๋ ฅ ๋
int min = 1000000;
for (int c = 0; c < 3; c++) {
int[][] dp = new int[n + 1][3];
dp[1][c] = in[1][c];
for (int j = 0; j < 3; j++) { //
if (j == c) {
dp[1][c] = in[1][c];
} else {
dp[1][j] = 1000000; // ์ด๊ฒ ํ์ํ ์ด์ ๋ ์์ ํฐ ๊ฐ์ผ๋ก ํด์ dp[2][]์ ๊ฒฝ์ฐ์ ๋ค๋ฅธ ์์์ด ์ ํ๋์ง์๋๋ก ํ๋ ๊ฒ
}
}
for (int i = 2; i <= n; i++) {
dp[i][0] = Math.min(dp[i - 1][1], dp[i - 1][2]) + in[i][0];
dp[i][1] = Math.min(dp[i - 1][0], dp[i - 1][2]) + in[i][1];
dp[i][2] = Math.min(dp[i - 1][1], dp[i - 1][0]) + in[i][2];
}
for (int i = 0; i < 3; i++) {
if (i != c) {
min = Math.min(min, dp[n][i]);
}
}
}
System.out.println(min);
}
}
๋์์ด ๋๋ค๋ฉด ๋๊ธ์ด๋ ๊ณต๊ฐ ๋ฒํผ ํ ๋ฒ์ฉ ๋๋ฅด๊ณ ๊ฐ์ฃผ์ธ์! ๋ก๊ทธ์ธ ์ํด๋ ๋ฉ๋๋ค ^_^
'OJ๐ผ > ์ค๋ต๋ ธํธ๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ][JAVA] 2559๋ฒ: ์์ด, 1912๋ฒ: ์ฐ์ํฉ, 2304๋ฒ: ์ฐฝ๊ณ ๋ค๊ฐํ - ๋์ ํฉ (0) | 2024.09.27 |
---|---|
[BOJ][JAVA] 1753๋ฒ: ์ต๋จ๊ฒฝ๋ก (0) | 2024.03.25 |
[BOJ][JAVA] 7576๋ฒ : ํ ๋งํ (0) | 2024.03.19 |
[BOJ][JAVA] 17822๋ฒ: ์ํ๋๋ฆฌ๊ธฐ (0) | 2024.03.17 |
[BOJ][JAVA] 2110๋ฒ: ๊ณต์ ๊ธฐ ์ค์น (0) | 2024.03.06 |