728x90
반응형
2024.08.22기준 - 실버1
백준, BEAKJOON, BOJ, JAVA, 자바
풀이
이 문제는 해당 인덱스에 RGB 와 인접하는 인덱스의 RGB끼리 서로 다른 RGB를 선택했을 때, 모든 집을 칠할 때 가장 적은 비용을 출력하는 문제입니다.
1. RGB를 저장하는 배열을 생성해 가장 첫번쨰 RGB를 따로 저장을 해주었습니다.
int[][] rgb = new int[t][3]; // RGB 저장 배열
// 첫 번째 RGB
StringTokenizer st = new StringTokenizer(br.readLine());
rgb[0][0] = Integer.parseInt(st.nextToken());
rgb[0][1] = Integer.parseInt(st.nextToken());
rgb[0][2] = Integer.parseInt(st.nextToken());
2. 두 번째 부터는 전 인덱스 중 해당 색상과 같지 않은 색상 중 작은 수와 현재 입력된 색상 수를 더 해 나가면서 값을 저장해 줍니다.
// 두 번째 부터 마지막 RGB
int r, g, b;
for (int i = 1; i < t; i++) {
st = new StringTokenizer(br.readLine());
r = Integer.parseInt(st.nextToken()); // 빨강
g = Integer.parseInt(st.nextToken()); // 초록
b = Integer.parseInt(st.nextToken()); // 파랑
// Math.min로 전 인덱스 중 해당 색상이랑 다른 색상 중 더 작은 수와 현재 색상을 더 해줍니다.
rgb[i][0] = Math.min(rgb[i - 1][1], rgb[i - 1][2]) + r;
rgb[i][1] = Math.min(rgb[i - 1][0], rgb[i - 1][2]) + g;
rgb[i][2] = Math.min(rgb[i - 1][1], rgb[i - 1][0]) + b;
}
3. 더 해진 배열을 통해 마지막 인덱스의 RGB중 가장 작은 값을 출력해줍니다.
int min = Math.min(rgb[t - 1][0], Math.min(rgb[t - 1][1], rgb[t - 1][2]));
코드
package Main;
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int t = Integer.parseInt(br.readLine()); // 테스트 케이스 개수
int[][] rgb = new int[t][3]; // RGB 저장 배열
// 첫 번째 RGB
StringTokenizer st = new StringTokenizer(br.readLine());
rgb[0][0] = Integer.parseInt(st.nextToken());
rgb[0][1] = Integer.parseInt(st.nextToken());
rgb[0][2] = Integer.parseInt(st.nextToken());
// 두 번째 부터 마지막 RGB
int r, g, b;
for (int i = 1; i < t; i++) {
st = new StringTokenizer(br.readLine());
r = Integer.parseInt(st.nextToken()); // 빨강
g = Integer.parseInt(st.nextToken()); // 초록
b = Integer.parseInt(st.nextToken()); // 파랑
// Math.min로 전 인덱스 중 해당 색상이랑 다른 색상 중 더 작은 수와 현재 색상을 더 해줍니다.
rgb[i][0] = Math.min(rgb[i - 1][1], rgb[i - 1][2]) + r;
rgb[i][1] = Math.min(rgb[i - 1][0], rgb[i - 1][2]) + g;
rgb[i][2] = Math.min(rgb[i - 1][1], rgb[i - 1][0]) + b;
}
int min = Math.min(rgb[t - 1][0], Math.min(rgb[t - 1][1], rgb[t - 1][2]));
bw.write(Integer.toString(min));
bw.flush();
bw.close();
br.close();
}
}
728x90
반응형
'코딩테스트 일기 (BAEKJOON)' 카테고리의 다른 글
BEAKJOON / 백준 - JAVA 15663번 N과 M (9) (0) | 2024.08.24 |
---|---|
BEAKJOON / 백준 - JAVA 15666번 N과 M (12) (0) | 2024.08.23 |
BEAKJOON / 백준 - JAVA 14585번 사수빈탕 (0) | 2024.08.21 |
BEAKJOON / 백준 - JAVA 11123번 양 한마리... 양 두마리... (0) | 2024.08.20 |
BEAKJOON / 백준 - JAVA 1965번 상자넣기 (0) | 2024.08.19 |