티스토리 뷰

코딩테스트/백준

[BJ] 1149. RGB 거리

jhk828 2021. 3. 23. 23:19

www.acmicpc.net/problem/1149

 

1149번: RGB거리

첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나

www.acmicpc.net

 

 

 

N개의 집을 R, G, B 색으로, 이웃과 색이 겹치지 않게 칠하는데 드는 최소 가격

→ R, G, B 3가지 방향으로 접근하여 N번째 까지 드는 비용을 각각 구한 후 3개 중 최소 가격 찾기

 

  • 2번째 집을 칠할 때 가격 = 1번째 집 까지 칠한 가격 + 2번째 집을 칠한 가격
  • 3번째 집을 칠할 때 가격 = 2번째 집 까지 칠한 가격 + 3번째 집을 칠한 가격
  • d[i] = d[i-1] + 최소값 map[i]
  • 이전 번째 집을 최소값으로 칠했다고 (d[i-1])해서 무조건 다음 집을 최소로 칠할 수 있는 것은 아님
    → 1. 첫번째 집을 R로
    1. 첫번째 집을 G로
    2. 세번째 집을 B로 칠할 경우 모두 고려하여 N번째 까지 계산해야 한다.
  • i번째 집은 i-1번째 집과 같은 색으로 칠할 수 없다.
    d[i][0] = Min(d[i-1][1], d[i-1], [2]) + a[i][0])
    d[i][1] = Min(d[i-1][0], d[i-1], [2]) + a[i][1])
    d[i][2] = Min(d[i-1][1], d[i-1], [2]) + a[i][2])
  • d[0][]인 값이 사용된다.
    d[0][0] = d[0][1] = d[0][2]= 0;

 

import java.io.*;
import java.util.*;
// 210323

public class Main_BJ_1149_RGB거리 {
	
	static int stoi(String str) {
		return Integer.parseInt(str);
	}

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = null;
		
		int N = stoi(br.readLine().trim());
		
		int[][] map = new int[N+1][3];
		int[][] d = new int[N+1][3];
		
		for(int i=1; i<=N; i++) {
			st = new StringTokenizer(br.readLine().trim(), " ");
			for(int j=0; j<3; j++) {
				map[i][j] = stoi(st.nextToken());
			}
		}
		
		// d[0][] 초기화
		d[0][0] = d[0][1] = d[0][2] = 0;
		for(int i=1; i<=N; i++) {
			// R
			d[i][0] = Math.min(d[i-1][1], d[i-1][2]) + map[i][0];	
			// G
			d[i][1] = Math.min(d[i-1][0], d[i-1][2]) + map[i][1];
			// B
			d[i][2] = Math.min(d[i-1][0], d[i-1][1]) + map[i][2];
		}
		
		// i==N에서 최소값 찾기
		int min = Integer.MAX_VALUE;
		for(int j=0; j<3; j++) {
			if(min>d[N][j]) min=d[N][j];
		}
		
		System.out.println(min);
		br.close();
	}
}

'코딩테스트 > 백준' 카테고리의 다른 글

[BJ] 14502. 연구소  (0) 2021.03.26
[BJ] 1600. 말이 되고픈 원숭이  (0) 2021.03.24
[BJ] 1463. 1로 만들기  (0) 2021.03.23
[BJ] 2206. 벽 부수고 이동하기  (0) 2021.03.17
[BJ] 17070.파이프 옮기기1  (0) 2021.03.06
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함