03
19

 

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);
	}
}

 

๋„์›€์ด ๋๋‹ค๋ฉด ๋Œ“๊ธ€์ด๋‚˜ ๊ณต๊ฐ ๋ฒ„ํŠผ ํ•œ ๋ฒˆ์”ฉ ๋ˆ„๋ฅด๊ณ  ๊ฐ€์ฃผ์„ธ์š”! ๋กœ๊ทธ์ธ ์•ˆํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค ^_^

 

๋ฐ˜์‘ํ˜•
COMMENT