백준 1149 RGB거리 (Silver1)

Wonkyun Jung·2023년 2월 14일
0

알고리즘

목록 보기
23/59
post-thumbnail

정답코드

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

public class Main{

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int N = Integer.parseInt(br.readLine());
		int minimum = Integer.MAX_VALUE;
		
		int[][]house = new int [N][N];
		int [][] DP = new int [N+1][3];
		
		for(int i = 0; i < N; i++) {
			String [] input = br.readLine().split(" ");
			for(int j = 0; j < 3; j++) {
				house[i][j] = Integer.parseInt(input[j]);
			}
		}
		
		for(int i = 1; i < N+1; i++) {
			//이번 집의 색깔을 RED로 칠할 때의 최솟값
            DP[i][0] = Math.min(DP[i-1][1]+house[i-1][0],DP[i-1][2]+ house[i-1][0]);
            //이번 집의 색깔을 GREEN로 칠할 때의 최솟값
			DP[i][1] = Math.min(DP[i-1][0]+house[i-1][1],DP[i-1][2]+ house[i-1][1]);
            //이번 집의 색깔을 BLUE로 칠할 때의 최솟값
			DP[i][2] = Math.min(DP[i-1][0]+house[i-1][2],DP[i-1][1]+ house[i-1][2]);
	
		}

		for (int i = 0; i < 3; i++) {
			minimum = Math.min(DP[N][i],minimum);
		}
		
		System.out.println(minimum);
		
	}

}


전략

  • 다이나믹 프로그래밍을 사용해야하는 경우 전체를 보면 더 풀기 힘들다.

  • 1과 2번 ...i와 i+1만 생각해서 문제에서 구하고자 하는 값에 대한 점화식을 세우자

  • DP문제 많이 풀어보자,,,

0개의 댓글