-
[백준] 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); } }실행 결과

'코딩테스트' 카테고리의 다른 글
[프로그래머스] k진수에서 소수 개수 구하기_Java (0) 2024.05.03 [프로그래머스] n^2 배열 자르기_Java (0) 2024.05.03 [백준] 11659 구간 합 구하기 4_Java (1) 2024.05.01 [백준] 5532 방학 숙제_Java (1) 2024.05.01 [백준] 16199 나이 계산하기_Java (0) 2024.05.01