Algorithm/백준
C++ 알고리즘 - 백준 1149 RGB 거리
마루설아
2025. 1. 24. 14:12
https://www.acmicpc.net/problem/1149
#include <bits/stdc++.h>
#define endl "\n"
using namespace std;
/******** 전역변수 ********/
/******** 함 수 ********/
int main(void) {
/******** C++ INIT ********/
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
/******** 지역변수 ********/
int input1;
int input2;
vector<int> result;
/******** 구 현 ********/
cin >> input1;
// 점화식 : 첫 RGB 금액대 벡터에 삽입
cin >> input2; result.push_back(input2);
cin >> input2; result.push_back(input2);
cin >> input2; result.push_back(input2);
// 두번째 RGB부터 동적 프로그래밍 시작
for (int i = 3; i < input1 * 3; i++) {
cin >> input2;
// R의 가격 최소값 구하기 : R + 이전 G 또는 B 중 최소값
if (i % 3 == 0)
result.push_back(min(input2 + result[i - 2], input2 + result[i - 1]));
// G의 가격 최소값 구하기 : G + 이전 R 또는 B 중 최소값
else if (i % 3 == 1)
result.push_back(min(input2 + result[i - 4], input2 + result[i - 2]));
// B의 가격 최소값 구하기 : B + 이전 R 또는 G 중 최소값
else
result.push_back(min(input2 + result[i - 5], input2 + result[i - 4]));
}
// 벡터의 마지막 3개의 요소 중 최소값은 전체 집 칠하기 최소 비용이 됨
cout << *min_element(result.end() - 3, result.end());
}