https://www.acmicpc.net/problem/1149
์ฝ๋
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(bf.readLine());
int[][] dp = new int[N][3];
int minMoney = 0;
for(int i=0; i<N; i++) {
StringTokenizer st = new StringTokenizer(bf.readLine());
dp[i][0] = Integer.parseInt(st.nextToken()); // Red
dp[i][1] = Integer.parseInt(st.nextToken()); // Green
dp[i][2] = Integer.parseInt(st.nextToken()); // Blue
}
for(int i=1; i<N; i++) {
dp[i][0] += Math.min(dp[i-1][1], dp[i-1][2]); // R์ผ๋ ์ต์ ๋น์ฉ -> G, B ๋น๊ต
dp[i][1] += Math.min(dp[i-1][0], dp[i-1][2]); // G์ผ๋ ์ต์ ๋น์ฉ -> R, B ๋น๊ต
dp[i][2] += Math.min(dp[i-1][0], dp[i-1][1]); // B์ผ๋ ์ต์ ๋น์ฉ -> R, G ๋น๊ต
}
minMoney = Math.min(dp[N-1][0], (Math.min(dp[N-1][1], dp[N-1][2]))); // R, G, B ์ค ์ต์ ๋น์ฉ ๊ตฌํ๊ธฐ
System.out.println(minMoney);
bf.close();
}
}
ํ์ด
์ ํ์ ์ธ Dynamic Programming(๋์ ๊ณํ๋ฒ)์ ๋ฌธ์ ๋ค. ์์ง์ DP๋ฌธ์ ์ ๋ํ ๊ฐ์ด ์ข ๋ถ์กฑํ ์ํ์ฌ์ ๋ธ๋ก๊ทธ๋ค์ ์ฐธ๊ณ ํ๋ 2์ฐจ์๋ฐฐ์ด๋ก ํด๊ฒฐํ๊ธธ๋, ์ฐธ์กฐํด์ ํ์ด๋ณด๋ ํด๊ฒฐํ ์ ์์๋ค.
i๋ฒ์งธ ์ง์ ์์ ์น ํ ๋, ๊ทธ i๋ฒ์งธ์ ์ง์ R, G, B ์ธ ๊ฐ์ง์ ์์ ์น ํ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ดํด๋ด์ผํ๋ค.
โ i๋ฒ์งธ์ ๋นจ๊ฐ์์ ์น ํ ๊ฒฝ์ฐ.
i-1๋ฒ์งธ์ ์น ํ ์ ์๋ ์์ ์ด๋ก์๊ณผ ํ๋์์ด ์๋ค.
๋ฐ๋ผ์ i๋ฒ์งธ์ ์น ํ ์ ์๋ ์ต์ ๋น์ฉ์ ...
์ด๋ก + ๋นจ๊ฐ = dp[i][1] + dp[i][0]
ํ๋ + ๋นจ๊ฐ = dp[i][2] + dp[i][0]
๋ ๊ฐ์ ๊ฐ ์ค ์ต์๊ฐ์ด ์ต์ ๋น์ฉ์ด ๋๋ค.
์ ์์ ์ ํ์์ผ๋ก ์ธ์ฐ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
dp[i][0] += Math.min(dp[i-1][1], dp[i-1][2]);
-> i๋ฒ์งธ ์ง์ ๋นจ๊ฐ์์ผ๋ก ์น ํ ๊ฒฝ์ฐ -> i-1๋ฒ์งธ๊ฐ ์ด๋ก๊ณผ ํ๋์ค ์ต์๊ฐ์ ๊ฒฝ์ฐ์ด๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก ์ด๋ก, ํ๋์์ ๊ฒฝ์ฐ๋ ๋์ผํ ์ ํ์์ ์ธ์ธ ์ ์๋ค.
dp[i][1] += Math.min(dp[i-1][0], dp[i-1][2]);
dp[i][2] += Math.min(dp[i-1][0], dp[i-1][1]);
๋ฐ๋ผ์ dp[i][] ๋ฒ์งธ์๋,
dp[i][0] => i๋ฒ์งธ๋ฅผ ๋นจ๊ฐ์์ผ๋ก ์น ํ ๊ฒฝ์ฐ์ ์ต์ ๋น์ฉ
dp[i][1] => i๋ฒ์งธ๋ฅผ ์ด๋ก์์ผ๋ก ์น ํ ๊ฒฝ์ฐ์ ์ต์ ๋น์ฉ
dp[i][2] => i๋ฒ์งธ๋ฅผ ํ๋์์ผ๋ก ์น ํ ๊ฒฝ์ฐ์ ์ต์ ๋น์ฉ
์ด ์ ์ฅ๋๋ค.
์ธ ๊ฐ์ค ๊ฐ์ฅ์ ์ ์ต์๋น์ฉ์ ์ ํํ๋ฉด ๊ทธ ๊ฐ์ด ๊ฒฐ๊ณผ๊ฐ์ด ๋๋ค.
Scanner(์๋) ์ BufferedReader(์)์ ์๊ฐ ์ฐจ์ด, ์ฝ 2๋ฐฐ !
๋ ์์ธํ ํด์ค์ ์ํ๋ฉด ์๋๋ฅผ ํด๋ฆญ,
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 2966๋ฒ: ์ฐ๊ธฐ(์์ ํ์, brute force) (0) | 2020.02.26 |
---|---|
[๋ฐฑ์ค] 1065๋ฒ: ํ์(์์ ํ์, brute force) (0) | 2020.02.26 |
[๋ฐฑ์ค] 11726๋ฒ: 2xn ํ์ผ๋ง(DP) (0) | 2020.02.25 |
[Codeforces] 1223A: CME (0) | 2020.02.25 |
[๋ฐฑ์ค] 1268๋ฒ: ์์ ๋ฐ์ฅ ์ ํ๊ธฐ(๊ตฌํ) (0) | 2020.02.24 |
๋๊ธ