
-Code
import java.io.*;
import java.util.*;
public class BOJ1149 {
public static void main(String[] args) throws IOException {
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
// rgb 비용 받기
int[][] rgbVals = new int[n + 1][3];
for (int i = 1; i <= n; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
for (int j = 0; j < 3; j++) {
rgbVals[i][j] = Integer.parseInt(st.nextToken());
}
}
// dp 초기화
int[][] dp = new int[n + 1][3];
for (int i = 0; i < 3; i++) {
dp[1][i] = rgbVals[1][i];
}
// dp 계산
for (int i = 2; i <= n; i++) {
dp[i][0] = rgbVals[i][0] + Math.min(dp[i - 1][1], dp[i - 1][2]);
dp[i][1] = rgbVals[i][1] + Math.min(dp[i - 1][0], dp[i - 1][2]);
dp[i][2] = rgbVals[i][2] + Math.min(dp[i - 1][0], dp[i - 1][1]);
}
// 최소값 구하기
int answer = Integer.MAX_VALUE;
for (int i = 0; i < 3; i++) {
answer = Math.min(answer, dp[n][i]);
}
System.out.println(answer);
}
}
처음에는 상태 관리를 따로 해서 각각 구해야 하는지 모르고 기존 1차원 배열을 만들어 풀려하니 풀리지 않았습니다. 그래서 찾아보니 상태를 각각 관리하여야 했고 이후에는 dp를 기준으로 rgbVals에서 고를 수 있는 최솟값을 가지고 저장했는데 이것도 rgbVals를 기준으로 이전 dp의 최솟값을 더해서 저장을 하는 게 맞았습니다. 이 부분을 해결하니 통과하였습니다.
'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글
| [프로그래머스/Java] 퍼즐 조각 채우기 (0) | 2026.01.10 |
|---|---|
| [프로그래머스/Java] 아이템 줍기 (0) | 2026.01.10 |
| [백준/Java] 6769번 Aromatic Numbers (0) | 2026.01.10 |
| [백준/Java] 1793번 타일링 (0) | 2026.01.09 |
| [백준/Java] 2502번 떡 먹는 호랑이 (0) | 2026.01.09 |