No Rules Rules

RGB거리 (feat. 백준, 1149번) 본문

생활/코테

RGB거리 (feat. 백준, 1149번)

개발하는 완두콩 2022. 7. 28. 22:35
728x90
반응형

RGB거리
https://www.acmicpc.net/problem/1149

 

1149번: RGB거리

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

www.acmicpc.net

// woohyeon.kim
// https://www.acmicpc.net/problem/1149
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
	ios::sync_with_stdio(false), cin.tie(), cout.tie();
	register int N, arr[1001][3];		// 빨강, 초록, 파랑
	cin >> N;
	for (register int n = 1; n <= N; ++n)
		cin >> arr[n][0] >> arr[n][1] >> arr[n][2];
	for (register int n = 2; n <= N; ++n) {
		// 현재 빨강은 이전 초록, 파랑집과 비교
		arr[n][0] = min(arr[n - 1][1] + arr[n][0], arr[n - 1][2] + arr[n][0]);
		// 현재 초록은 이전 빨강, 파랑집과 비교
		arr[n][1] = min(arr[n - 1][0] + arr[n][1], arr[n - 1][2] + arr[n][1]);
		// 현재 파랑은 이전 빨강, 초록집과 비교
		arr[n][2] = min(arr[n - 1][0] + arr[n][2], arr[n - 1][1] + arr[n][2]);
	}
	cout << *min_element(arr[N], arr[N] + 3) << endl;
	return 0;
}
// *&)*@*
  1. 첫번째 집은 reference로 두고, 두번째 집부터 봅니다.
  2. 두번째 집을 Ai라고 하고, 이전집을 Ai-1이라고 했을때, Ai{빨강} = min( Ai-1{초록} + Ai{빨강}, Ai-1{파랑} + Ai{빨강} ) 의 식으로 도출됩니다.
  3. 초록과 파랑 또한 마찬가지입니다.
  4. 따라서 가장 마지막인 N번째 집의 빨강, 초록, 파랑 중 가장 작은 값을 출력하면 완료됩니다.
728x90
반응형
Comments