public class Solution {
	
    // 땅따먹기
	
    public static int solution(int[][] land) {
        int answer = 0;
        int[][] sumArr = new int[land.length][land[0].length];
        
        sumArr = land;

        for (int i = 1; i < land.length; i++) { // 행
        	
        	for (int j = 0; j < 4; j++) { // 열
        		
        		int max = sumArr[i][j]; // 비교 대상 행의 열 값을 max로 지정
        		
        		for (int z = 0; z < 4; z++) { // 비교 열
        			
        			if (j == z) { // 같은 행에선 비교x
        				continue;
        			}
        			
        			if (max < sumArr[i - 1][z] + land[i][j]) {
        				max = sumArr[i - 1][z] + land[i][j]; // 더 큰 값이 존재한다면 max값 변경
        			}
        		}
        		
        		sumArr[i][j] = max; // 비교가 끝났다면 이번 행, 이번 열이 가질 수 있는 최대값 갱신
        	}	
        }
        
//        for (int i = 0; i < land.length; i++) {
//        	
//        	for (int j = 0; j < 4; j++) {
//        		System.out.print(sumArr[i][j] + " ");
//        	}	
//        	System.out.println();
//        }
        
        int sumMax = sumArr[sumArr.length - 1][0];
        
        for (int i = 1; i < 4; i++) {
        	
        	if (sumMax < sumArr[sumArr.length - 1][i]) {
        		sumMax = sumArr[sumArr.length - 1][i];
        	}
        }
        
        answer = sumMax;

        return answer;
    }

    public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[][] land = {{1,2,3,5},{5,6,7,8},{4,3,2,1}};
		
		System.out.println(solution(land)); // 16
    }
}

프로그래머스 땅따먹기 문제 풀이 Java

+ Recent posts