[백준 1149번 / Java] RGB거리 - DP코딩테스트/백준2023. 7. 18. 07:03
Table of Contents
728x90
728x90
문제 링크
Silver 1
https://www.acmicpc.net/problem/1149
풀이
문제에서 N은 N-1과 N+1과 색상을 중복해서는 안된다. 라고 하는 부분에서 조금 헷갈렸는데 결론은 크게 신경쓰지 않아도 된다.
N일 때 N-1에서 중복만 체크한다면 어떤 상황에서도 중복이 될 일은 없다.
for (int i = 0; i < N; i ++) {
st = new StringTokenizer(br.readLine(), " ");
int R = Integer.parseInt(st.nextToken());
int G = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
if(i > 0) {
arr[i][0] = Math.min(arr[i - 1][1], arr[i - 1][2]) + R;
arr[i][1] = Math.min(arr[i - 1][0], arr[i - 1][2]) + G;
arr[i][2] = Math.min(arr[i - 1][0], arr[i - 1][1]) + B;
continue;
}
arr[i][0] = R;
arr[i][1] = G;
arr[i][2] = B;
}
N일 때 겹치지 않는 색상 중 N-1의 값에서 최소값을 더하기만 하면 된다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
int[][] arr = new int[N][3];
for (int i = 0; i < N; i ++) {
st = new StringTokenizer(br.readLine(), " ");
int R = Integer.parseInt(st.nextToken());
int G = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
if(i > 0) {
arr[i][0] = Math.min(arr[i - 1][1], arr[i - 1][2]) + R;
arr[i][1] = Math.min(arr[i - 1][0], arr[i - 1][2]) + G;
arr[i][2] = Math.min(arr[i - 1][0], arr[i - 1][1]) + B;
continue;
}
arr[i][0] = R;
arr[i][1] = G;
arr[i][2] = B;
}
System.out.println(Math.min(arr[N - 1][0], Math.min(arr[N - 1][1], arr[N - 1][2])));
}
}
728x90
300x250
@mag1c :: 꾸준히 재밌게
2023.04 ~ 백엔드 개발자의 기록
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!