DP로 풀이하면 되는 문제이다.
가로의 길이가 4로 고정되어 있기 때문에 4가지의 case를 나누어서 dp 테이블을 채워주었다.
문제의 예제를 그림으로 표현하면 아래과 같다.
한 행씩 내려올 때, 같은 열을 연속해서 밟을 수 없다
라는 규칙이 있기 때문에, 첫번째 그림처럼 같은 열을 제외한 다른 열의 값 중 가장 큰 값과 원래 값을 더해주면 된다! 이걸 모든 열에 대해 다 해주면 된다.class Solution {
static int solution(int[][] land) {
int n = land.length;
int[][] dp = new int[n][4];
for (int i = 0; i < 4; i++) {
dp[0][i] = land[0][i];
}
for (int i = 1; i < n; i++) {
dp[i][0] = Math.max(dp[i - 1][1], Math.max(dp[i - 1][2], dp[i - 1][3])) + land[i][0];
dp[i][1] = Math.max(dp[i - 1][0], Math.max(dp[i - 1][2], dp[i - 1][3])) + land[i][1];
dp[i][2] = Math.max(dp[i - 1][0], Math.max(dp[i - 1][1], dp[i - 1][3])) + land[i][2];
dp[i][3] = Math.max(dp[i - 1][0], Math.max(dp[i - 1][1], dp[i - 1][2])) + land[i][3];
}
int answer = Math.max(Math.max(dp[n-1][0], dp[n-1][1]), Math.max(dp[n-1][2], dp[n-1][3]));
return answer;
}
}
난이도 : LEVEL 2
딱히 없음