[Silver I][JAVA] 1149번:RGB 거리

호수·2023년 9월 12일
0

JAVA 알고리즘

목록 보기
34/67
post-thumbnail
post-custom-banner

난이도
실버 1

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

풀이
테이블 정의하기
dp[i] = i번째 집일 때 집을 칠하는 최소 비용

점화식 찾기
i번째 집이 빨강일 때(0),
i-1번째 집이 초록집이거나 파랑인 경우에 최솟값과 빨강일 때의 값을 더해줍니다.
i번째 집이 초록일 때(1), i번째 집이 파랑일 때(2)도 위와 같은 방식으로 식을 채워줍니다.

dp[i][0] = Math.min(dp[i - 1][1], dp[i - 1][2]) + r;
dp[i][1] = Math.min(dp[i - 1][0], dp[i - 1][2]) + g;
dp[i][2] = Math.min(dp[i - 1][0], dp[i - 1][1]) + b;

초기값 정의하기
없음
출력은 dp[n][0], dp[n][1], dp[n][2] 중 최솟값을 출력합니다.

코드

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

// 1149번 RGB 거리
public class RGB거리 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

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

        int[][] dp = new int[n + 1][3];

        for (int i = 1; i <= n; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int r = Integer.parseInt(st.nextToken());
            int g = Integer.parseInt(st.nextToken());
            int b = Integer.parseInt(st.nextToken());

            dp[i][0] = Math.min(dp[i - 1][1], dp[i - 1][2]) + r;
            dp[i][1] = Math.min(dp[i - 1][0], dp[i - 1][2]) + g;
            dp[i][2] = Math.min(dp[i - 1][0], dp[i - 1][1]) + b;
        }
        System.out.println(Math.min(dp[n][0], Math.min(dp[n][1], dp[n][2])));

    }
 }
profile
Back-End개발자 성장과정 블로그🚀
post-custom-banner

0개의 댓글