#include <iostream>
#include <vector>
#include <tuple>
#include <algorithm>
 
int main()
{
	int N = 0;
	std::cin >> N;
	std::vector<std::tuple<int, int, int>> vec(N);
	std::vector<std::tuple<int, int, int>> DP(N, { 100000000,100000000, 100000000 });
 
	for (int i = 0; i < N; ++i)
	{
		std::cin >> std::get<0>(vec[i]) >> std::get<1>(vec[i]) >> std::get<2>(vec[i]);
	}
 
	DP[0] = { std::get<0>(vec[0]),std::get<1>(vec[0]),std::get<2>(vec[0]) };
 
	for (int i = 1; i < N; ++i)
	{
		std::get<0>(DP[i]) = std::min(std::get<1>(DP[i - 1]), std::get<2>(DP[i - 1])) + std::get<0>(vec[i]);
		std::get<1>(DP[i]) = std::min(std::get<0>(DP[i - 1]), std::get<2>(DP[i - 1])) + std::get<1>(vec[i]);
		std::get<2>(DP[i]) = std::min(std::get<0>(DP[i - 1]), std::get<1>(DP[i - 1])) + std::get<2>(vec[i]);
	}
 
	std::cout << std::min(std::min(std::get<0>(DP[N - 1]), std::get<1>(DP[N - 1])), std::get<2>(DP[N - 1]));
 
	return 0;
}

DP문제입니다.

tuple을 쓴 이유는 2가지를 넘어갔기 때문에 pair를 이용하기 보다는 tuple로 하는 것이 좋을 것이라 생각했습니다.

시작을 3가지 위치로 결정해서 끝까지 계산을 한 뒤 어느 부분이 가장 작은가 확인하면 됩니다.

+ Recent posts