코딩테스트/프로그래머스
[Java] 프로그래머스 Level 2 : 땅따먹기
이덩우
2023. 8. 8. 01:03
- 문제설명
- 해결과정
- 솔루션
import java.util.*;
class Solution {
int solution(int[][] land) {
int N = land.length;
int[][] landSum = new int[N][4];
landSum = makeRowNumOf1(land, landSum);
landSum = memorizedSum(land, landSum, N);
return findMaxValue(landSum, N);
}
private int[][] makeRowNumOf1(int[][] land, int[][] landSum) {
for(int i = 0; i < 4; i++) {
landSum[0][i] = land[0][i];
}
return landSum;
}
private int[][] memorizedSum(int[][] land, int[][] landSum, int N) {
for(int i = 1; i < N; i++) {
landSum[i][0] = land[i][0] + searchMax(landSum[i-1][1], landSum[i-1][2], landSum[i-1][3]);
landSum[i][1] = land[i][1] + searchMax(landSum[i-1][0], landSum[i-1][2], landSum[i-1][3]);
landSum[i][2] = land[i][2] + searchMax(landSum[i-1][0], landSum[i-1][1], landSum[i-1][3]);
landSum[i][3] = land[i][3] + searchMax(landSum[i-1][0], landSum[i-1][1], landSum[i-1][2]);
}
return landSum;
}
private int searchMax(int a, int b, int c) {
return Math.max(Math.max(a, b), c);
}
private int findMaxValue(int[][] landSum, int N) {
int max = 0;
for(int i = 0; i < 4; i++) {
int currentValue = landSum[N-1][i];
if(currentValue > max) {
max = currentValue;
}
}
return max;
}
}