dp
로 푸는 문제
v
를 초기화한다. v
의 행과 열에는 그 행과 열을 밟을 경우의 최대 점수가 저장된다.v
의 맨 첫 행은 이 전에 밟은 것이 아니니 land
값으로 초기화 하고,v[i][j]=max(v[i][j], v[i-1][k]+land[i][j])
v[v.size()-1][0]
을 출력한다.#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
int solution(vector<vector<int> > land)
{
int answer = 0;
vector<vector<int>> v(land.size(), vector<int>(4));
for(int i=0;i<land.size();i++)
{
for(int j=0;j<4;j++)
{
if(i==0) // 맨 첫 행
{
v[0][j]=land[0][j];
}
else
{
for(int k=0;k<4;k++)
{
if(k!=j)
{
v[i][j]=max(v[i][j], v[i-1][k]+land[i][j]);
}
}
}
}
}
sort(v[v.size()-1].begin(), v[v.size()-1].end(), greater<int>());
answer = v[v.size()-1][0];
return answer;
}