Be a developer

백준 1149 RGB거리 본문

알고리즘

백준 1149 RGB거리

중국고대사 2019. 10. 1. 01:15

기본적인 DP 문제이다.

 

임의의 한 지점(i 번째)에 있는 집이 빨강일 때, 초록일 때 파랑일 때로 나누어서 생각한다.

1)빨강일 때: min(i-1번 째 있는 집이 파랑, i-1번 째 있는 집이 노랑) + i번째가 빨강일 때 칠하는 비용

2)초록일 때: min(i-1번 째 있는 집이 빨강, i-1번 째 있는 집이 파랑) + i번째가 초록일 때 칠하는 비용

3)파랑일 때: min(i-1번 째 있는 집이 빨강, i-1번 째 있는 집이 초록) + i번째가 파랑일 때 칠하는 비용

 

따라서 DP 배열을 선언할 때 2차원 배열로 선언하고 dp[n][3]으로 생선한다.(n은 집의 개수, 3은 빨강,초록,파랑)

마지막 최솟값은 n번째 집의 min(빨강,초록,파랑) 이다.

 

코드는 아래와 같다.

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

public class Main1149 {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		StringTokenizer st;
		int n = Integer.parseInt(br.readLine());

		// 0: 빨강, 1: 초록, 2: 파랑
		int[][] input = new int[n][3];

		for (int i = 0; i < n; i++) {
			st = new StringTokenizer(br.readLine());
			input[i][0] = Integer.parseInt(st.nextToken());
			input[i][1] = Integer.parseInt(st.nextToken());
			input[i][2] = Integer.parseInt(st.nextToken());
		}

		int[][] dp = new int[n][3];
		dp[0][0] = input[0][0];
		dp[0][1] = input[0][1];
		dp[0][2] = input[0][2];

		for (int i = 1; i < n; i++) {
			dp[i][0] = (dp[i - 1][1] + input[i][0] < dp[i - 1][2] + input[i][0]) ? dp[i - 1][1] + input[i][0]
					: dp[i - 1][2] + input[i][0];
			dp[i][1] = (dp[i - 1][0] + input[i][1] < dp[i - 1][2] + input[i][1]) ? dp[i - 1][0] + input[i][1]
					: dp[i - 1][2] + input[i][1];
			dp[i][2] = (dp[i - 1][0] + input[i][2] < dp[i - 1][1] + input[i][2]) ? dp[i - 1][0] + input[i][2]
					: dp[i - 1][1] + input[i][2];
		}
		int ans = min(dp[n - 1][0], dp[n - 1][1], dp[n - 1][2]);
		System.out.println(ans);
	}

	private static int min(int i, int j, int k) {
		int ret;
		if (i < j)
			ret = i;
		else
			ret = j;

		if (ret > k)
			ret = k;
		return ret;
	}

}

'알고리즘' 카테고리의 다른 글

Java로 알고리즘 풀면서 명심할 사항들  (0) 2019.09.17
백준 12851 숨바꼭질 2  (0) 2019.04.09
백준 2251 물통  (0) 2019.04.09
백준 9019 DSLR  (0) 2019.04.08
백준 13913 숨바꼭질 4  (0) 2019.04.08
Comments