https://www.acmicpc.net/problem/1149
1149번: RGB거리
첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나
www.acmicpc.net
import java.io.*;
import java.util.*;
public class Main {
public static int[][] memo;
public static int[][] house;
public static void main(String[] args) throws IOException{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
house = new int[n][3];
memo = new int[n][3];
for(int i=0; i<n; i++) {
st = new StringTokenizer(br.readLine());
house[i][0] = Integer.parseInt(st.nextToken());
house[i][1] = Integer.parseInt(st.nextToken());
house[i][2] = Integer.parseInt(st.nextToken());
}
for(int i=0; i<3;i++) {
memo[0][i] = house[0][i];
}
for(int i=1; i<n; i++) {
memo[i][0] = house[i][0]+ Math.min(memo[i-1][1], memo[i-1][2]);
memo[i][1] = house[i][1]+Math.min(memo[i-1][0], memo[i-1][2]);
memo[i][2] = house[i][2]+Math.min(memo[i-1][1], memo[i-1][0]);
}
int min = Integer.MAX_VALUE;
for(int i=0; i<3;i++) {
if(memo[n-1][i]<min) {
min = memo[n-1][i];
}
}
bw.write(min+"");
bw.close();
}
}
n번째 줄에서 봤을 때 색이 겹치지 않는 n-1번째 비용 두 개 중 작은 값을 더해서 누적시키는 방식으로 풀었다.
'백준' 카테고리의 다른 글
백준 동적계획법 - 2579번 : 계단 오르기 (0) | 2022.02.17 |
---|---|
백준 동적계획법 - 1932번 : 정수 삼각형 (0) | 2022.02.17 |
백준 동적계획법 - 9461번 : 파도반 수열 (0) | 2022.02.16 |
백준 동적계획법 - 1904번 : 01타일 (0) | 2022.02.16 |
백준 동적계획법 - 9184번 : 신나는 함수 실행 (0) | 2022.02.16 |