https://www.acmicpc.net/problem/1149
코드 :
dp - bottom up
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int seq[][];
static int dp[][];
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
seq = new int[N][3];
dp = new int[N][3];
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
seq[i][0] = Integer.parseInt(st.nextToken()); // Red
seq[i][1] = Integer.parseInt(st.nextToken()); // Green
seq[i][2] = Integer.parseInt(st.nextToken()); // Blue
}
dp[0][0] = seq[0][0];
dp[0][1] = seq[0][1];
dp[0][2] = seq[0][2];
for (int i = 1; i < N; i++) {
dp[i][0] += seq[i][0] + Math.min(dp[i - 1][1] , dp[i - 1][2]);
dp[i][1] += seq[i][1] + Math.min(dp[i - 1][2] , dp[i - 1][0]);
dp[i][2] += seq[i][2] + Math.min(dp[i - 1][0] , dp[i - 1][1]);
}
int answer = Math.min(dp[N - 1][0], Math.min(dp[N - 1][1], dp[N - 1][2]));
System.out.println(answer);
}
}
풀이 :
요약하면 연속해서 같은 색깔로 칠하면 안된다는 내용이다.
dp[N][0~2] 는 N번째까지 집을 칠했을때, N번째를 해당 색깔[0~2]로 칠할때 최소값을 의미한다. 순차적으로 값을 저장하면 된다.
마지막 for문 부분에 처음에 실수로 '+='를 먼저 썼는데, '+'보다 속도가 빠르다고 나오는데 이유를 모르겠다. 찾아도 잘 안나온다.
'알고리즘 > 백준' 카테고리의 다른 글
백준 11057번 - 오르막 수 (Java) (0) | 2022.03.30 |
---|---|
백준 1309번 - 동물원 (Java) (0) | 2022.03.29 |
백준 15988번 - 1, 2, 3 더하기 3 (Java) (0) | 2022.03.29 |
백준 2225번 - 합분해 (Java) (0) | 2022.03.28 |
백준 1699번 - 제곱수의 합 (Java) (0) | 2022.03.28 |
댓글