코딩테스트
[백준] 1149 RGB거리_Java
오류유발자
2024. 5. 1. 21:07
문제 링크
https://www.acmicpc.net/problem/1149
문제 풀이
1. 1번 집부터 N번 집이 순서대로 있다.
2. 집은 빨강, 초록, 파랑 중 하나의 색으로 칠해야 한다. 각각의 집을 빨강, 초록, 파랑으로 칠하는 비용이 주어졌을 때, 모든 집을 칠하는 비용의 최솟값을 구해보자.
3. 인접하는 집의 색은 같은 색으로 칠할 수 없다.
코드
DP알고리즘을 이용하여, i번째 집을 빨강, 초록, 파랑 색으로 칠할 경우 최소 비용을 구하는 것을 반복하여 N번째 집까지 칠하는 최소 비용을 구한다.import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(bf.readLine());
int[][] dp = new int[n][3];
StringTokenizer st = new StringTokenizer(bf.readLine());
for(int i=0; i<3;i++) dp[0][i] = Integer.parseInt(st.nextToken());
for(int i=1; i<n; i++){
st = new StringTokenizer(bf.readLine());
for(int j =0; j<3; j++ ) {
int temp = Integer.parseInt(st.nextToken());
int num =Integer.MAX_VALUE;
for(int k=0; k<3; k++){
if(j==k) continue;
num = Math.min(num,dp[i-1][k]+temp);
}
dp[i][j]=num;
}
}
int min = Integer.MAX_VALUE;
for(int i=0; i<3; i++) min = Math.min(min, dp[n-1][i] );
System.out.println(min);
}
}
실행 결과
