#include <iostream>
#include <limits.h>
#include <algorithm>
#include <vector>
using namespace std;
using ll = long long;
#pragma region 상하좌우 / 위치
const pair<int, int> dir[]
{
{ 1, 0 },
{ -1, 0 },
{ 0, -1 },
{ 0, 1 },
};
#define y first
#define x second
#pragma endregion
#pragma region 빠른 입출력
#define FAST_IO() \
{\
ios::sync_with_stdio(false);\
cin.tie(NULL); \
cout.tie(NULL); \
}\
#pragma endregion
#define MAX 1001
int main()
{
FAST_IO();
int color[MAX][3], dp[MAX][3];
int n, ans = INT_MAX;
cin >> n;
for (int i = 1; i <= n; i++)
cin >> color[i][0] >> color[i][1] >> color[i][2];
// 1번 집의 색
for (int rgb = 0; rgb < 3; rgb++)
{
// 다른 집의 색은 MAX로 지정하여 dp할때 선택되지 않도록 함
for (int i = 0; i < 3; i++)
dp[1][i] = (i == rgb) ? color[1][i] : 1e9;
// DP
for (int i = 2; i <= n; i++)
{
dp[i][0] = color[i][0] + min(dp[i - 1][1], dp[i - 1][2]);
dp[i][1] = color[i][1] + min(dp[i - 1][0], dp[i - 1][2]);
dp[i][2] = color[i][2] + min(dp[i - 1][0], dp[i - 1][1]);
}
// 1번집 색과 N번집 색이 겹치지 않게 함
for (int i = 0; i < 3; i++)
{
if (i != rgb)
ans = min(ans, dp[n][i]);
}
}
cout << ans;
return 0;
}
카테고리 없음