알고리즘 문제 풀이
백준 / RGB거리
딩신
2018. 11. 1. 13:18
RGB거리
| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞은 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 0.5 초 (언어별 추가 시간 없음) | 128 MB | 25887 | 11378 | 8530 | 46.123% |
문제
RGB거리에 사는 사람들은 집을 빨강, 초록, 파랑중에 하나로 칠하려고 한다. 또한, 그들은 모든 이웃은 같은 색으로 칠할 수 없다는 규칙도 정했다. 집 i의 이웃은 집 i-1과 집 i+1이다. 처음 집과 마지막 집은 이웃이 아니다.
각 집을 빨강으로 칠할 때 드는 비용, 초록으로 칠할 때 드는 비용, 파랑으로 드는 비용이 주어질 때, 모든 집을 칠할 때 드는 비용의 최솟값을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 집의 수 N이 주어진다. N은 1,000보다 작거나 같다. 둘째 줄부터 N개의 줄에 각 집을 빨강으로 칠할 때, 초록으로 칠할 때, 파랑으로 칠할 때 드는 비용이 주어진다. 비용은 1,000보다 작거나 같은 자연수이다.
출력
첫째 줄에 모든 집을 칠할 때 드는 비용의 최솟값을 출력한다.
예제 입력 1
3 26 40 83 49 60 57 13 89 99
예제 출력 1
96
출처
//RGB거리
import java.util.*;
public class Main {
public static ArrayList<Integer> box = new ArrayList<>();
//첫째 줄에 괄호 문자열이 한 줄에 주어진다. 하나의 괄호 문자열의 길이는 2 이상 50 이하이다.
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//총 몇개의 숫자를 입력 받을 것인지
int a;
int[][] b;
int c;
int d = 0;
int e = 0;
Stack<String> stack = new Stack<>();
a = sc.nextInt();
b = new int[a + 1][3];
for (int i = 1; i <= a; i++) {
c = sc.nextInt();
d = sc.nextInt();
e = sc.nextInt();
b[i][0] = c;
b[i][1] = d;
b[i][2] = e;
}
for (int i = 1; i <= a; i++) {
for (int j = 0; j < 3; j++) {
b[i][j] += Math.min(b[i - 1][(j + 1) % 3], b[i - 1][(j + 2) % 3]);
}
}
sc.close();
System.out.println(Math.min(b[a][0], Math.min(b[a][1], b[a][2])));
}
}