링크 : 프로그래머스 level2 ) 땅따먹기
D[N][4] 배열을 만들고,
D[i][j] 는 D[i-1][]행중(자신의 열을 제외)에 최대값을 더한 값이다.
D[i][0] = land[i][0]+Max(D[i-1][1],D[i-1][2],D[i-1][3])
D[i][1] = land[i][1]+Max(D[i-1][0],D[i-1][2],D[i-1][3])
D[i][2] = land[i][2]+Max(D[i-1][0],D[i-1][1],D[i-1][3])
D[i][3] = land[i][3]+Max(D[i-1][0],D[i-1][1],D[i-1][2])
마지막 최대값은 D[N-1][0~3]중에 최대값을 출력하면 된다.
class Solution {
static int findMax(int a, int b, int c)
{
if(a<b)
{
if(b>c) return b;
else return c;
}
else
{
if(a>c)return a;
else return c;
}
}
int solution(int[][] land) {
for(int i=1; i<land.length;i++)
{
for(int j=0; j<4;j++)
{
if(j==0)
land[i][j]=land[i][j]+findMax(land[i-1][1], land[i-1][2], land[i-1][3]);
else if(j==1)
land[i][j]=land[i][j]+findMax(land[i-1][0], land[i-1][2], land[i-1][3]);
else if(j==2)
land[i][j]=land[i][j]+findMax(land[i-1][0], land[i-1][1], land[i-1][3]);
else
land[i][j]=land[i][j]+findMax(land[i-1][0], land[i-1][1], land[i-1][2]);
}
}
int answer = -1;
for(int i=0; i<4;i++)
{
if(answer<land[land.length-1][i])
answer =land[land.length-1][i];
}
return answer;
}
}