https://www.acmicpc.net/problem/1149

 

1149๋ฒˆ: RGB๊ฑฐ๋ฆฌ

์ฒซ์งธ ์ค„์— ์ง‘์˜ ์ˆ˜ N(2 โ‰ค N โ‰ค 1,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ๊ฐ ์ง‘์„ ๋นจ๊ฐ•, ์ดˆ๋ก, ํŒŒ๋ž‘์œผ๋กœ ์น ํ•˜๋Š” ๋น„์šฉ์ด 1๋ฒˆ ์ง‘๋ถ€ํ„ฐ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ฃผ์–ด์ง„๋‹ค. ์ง‘์„ ์น ํ•˜๋Š” ๋น„์šฉ์€ 1,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜

www.acmicpc.net

 

 

 

 

 

์ƒํ–ฅ์‹ or ํ•˜ํ–ฅ์‹์œผ๋กœ ํ‘ธ๋Š” DP ๊ฐœ๋…์„ ์•ˆ๋‹ค๋ฉด ๊ธˆ๋ฐฉ ์‰ฝ๊ฒŒ ํ’€๋ฆฐ๋‹ค.

 

cost ๋ฐฐ์—ด๊ณผ ํฌ๊ธฐ๊ฐ€ ๊ฐ™์€ 2์ฐจ์›์˜ dp ๋ฐฐ์—ด์— dp[i][j]๊นŒ์ง€์˜ ๋น„์šฉ์˜ ํ•ฉ์„ ์ €์žฅํ•œ๋‹ค.

 

1. dp ๋ฐฐ์—ด์˜ 0ํ–‰ : 1๋ฒˆ ์ง‘์˜ R, G, B ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.

2. dp ๋ฐฐ์—ด์˜ 1 ~ N-1ํ–‰

 - R์„ ์„ ํƒํ•  ๊ฒฝ์šฐ : ํ˜„์žฌ์˜ ํ–‰์—์„œ R์„ ์„ ํƒํ•  ๊ฒฝ์šฐ์˜ ๋น„์šฉ์— ์ด์ „ ํ–‰์—์„œ G๋ฅผ ์„ ํƒํ–ˆ์„ ๊ฒฝ์šฐ์˜ ๋น„์šฉ์˜ ํ•ฉ๊ณผ ์ด์ „ ํ–‰์—์„œ B๋ฅผ ์„ ํƒํ–ˆ์„ ๊ฒฝ์šฐ์˜ ๋น„์šฉ์˜ ํ•ฉ ์ค‘ ์ตœ์†Ÿ๊ฐ’์„ ๋”ํ•œ๋‹ค.

 - G๋ฅผ ์„ ํƒํ•  ๊ฒฝ์šฐ : ํ˜„์žฌ์˜ ํ–‰์—์„œ G์„ ์„ ํƒํ•  ๊ฒฝ์šฐ์˜ ๋น„์šฉ์— ์ด์ „ ํ–‰์—์„œ R์„ ์„ ํƒํ–ˆ์„ ๊ฒฝ์šฐ์˜ ๋น„์šฉ์˜ ํ•ฉ๊ณผ ์ด์ „ ํ–‰์—์„œ B๋ฅผ ์„ ํƒํ–ˆ์„ ๊ฒฝ์šฐ์˜ ๋น„์šฉ์˜ ํ•ฉ ์ค‘ ์ตœ์†Ÿ๊ฐ’์„ ๋”ํ•œ๋‹ค.

 - B๋ฅผ ์„ ํƒํ•  ๊ฒฝ์šฐ : ํ˜„์žฌ์˜ ํ–‰์—์„œ G์„ ์„ ํƒํ•  ๊ฒฝ์šฐ์˜ ๋น„์šฉ์— ์ด์ „ ํ–‰์—์„œ R์„ ์„ ํƒํ–ˆ์„ ๊ฒฝ์šฐ์˜ ๋น„์šฉ์˜ ํ•ฉ๊ณผ ์ด์ „ ํ–‰์—์„œ G๋ฅผ ์„ ํƒํ–ˆ์„ ๊ฒฝ์šฐ์˜ ๋น„์šฉ์˜ ํ•ฉ ์ค‘ ์ตœ์†Ÿ๊ฐ’์„ ๋”ํ•œ๋‹ค.

 

์ •๋‹ต(์ตœ์†Ÿ๊ฐ’)์€ N - 1ํ–‰์—์„œ ์ตœ์ข…์ ์œผ๋กœ R์„ ์„ ํƒํ–ˆ์„ ๊ฒฝ์šฐ, G๋ฅผ ์„ ํƒํ–ˆ์„ ๊ฒฝ์šฐ, B๋ฅผ ์„ ํƒํ–ˆ์„ ๊ฒฝ์šฐ ์ค‘ ์ตœ์†Ÿ๊ฐ’์ด๋‹ค.

 

 

 

 

 

์ฝ”๋“œ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class RGBStreet {

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int N = Integer.parseInt(br.readLine());
		
		int[][] cost = new int[N][3];
		
		for(int i = 0; i < N; i++) {
			String[] input = br.readLine().split(" ");
			
			for(int j = 0; j < 3; j++) {
				cost[i][j] = Integer.parseInt(input[j]);
			}
		}
		
		int[][] dp = new int[N][3];
		
		dp[0][0] = cost[0][0];
		dp[0][1] = cost[0][1];
		dp[0][2] = cost[0][2];
				
		for(int i = 1; i < N; i++) {
			dp[i][0] = cost[i][0] + Math.min(dp[i - 1][1], dp[i - 1][2]);
			dp[i][1] = cost[i][1] + Math.min(dp[i - 1][0], dp[i - 1][2]);
			dp[i][2] = cost[i][2] + Math.min(dp[i - 1][0], dp[i - 1][1]);	
		}
		
		int min = Math.min(dp[N - 1][0], Math.min(dp[N - 1][1], dp[N - 1][2]));
		
		System.out.println(min);
	
	}

}

 

 

 

 

 

๊ฒฐ๊ณผ

 

giraffe_