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());
}
'알고리즘' 카테고리의 다른 글
C++ 알고리즘 - 2156 포도주 시식 (0) | 2025.01.24 |
---|---|
C++ 알고리즘 - 1932 정수 삼각형 (0) | 2025.01.24 |
C++ 알고리즘 - 18115 카드 놓기 (0) | 2025.01.24 |
C++ 알고리즘 - 11053 가장 긴 증가하는 부분 수열 (0) | 2025.01.23 |
C++ 알고리즘 - 1921 연속합 (다이나믹 프로그래밍) (0) | 2025.01.22 |