본문 바로가기
Beakjoon&프로그래머스/Java

[프로그래머스/Java] 땅따먹기

by 현장 2026. 3. 29.

-Code

class Solution {
    public int solution(int[][] land) {
        // dp 초기 셋팅
        int rowSize = land.length;
        int[][] dp = new int[rowSize][4];
        for (int i = 0; i < 4; i++) {
            dp[0][i] = land[0][i];
        }
        // 1번 행부터 dp 저장
        for (int row = 1; row < rowSize; row++) {
            for (int col = 0; col < 4; col++) {
                int maxVal = 0;
                for (int checkCol = 0; checkCol < 4; checkCol++) {
                    // 현재 열과 이전 열이 같으면 다음 열 검사
                    if (col == checkCol) continue;
                    // 최대값 찾기
                    maxVal = Math.max(maxVal, dp[row - 1][checkCol]);
                }
                dp[row][col] = land[row][col] + maxVal;
            }
        }
        // 최대 합 찾기
        int answer = 0;
        for (int i = 0; i < 4; i++) {
            answer = Math.max(answer, dp[rowSize - 1][i]);
        }
        return answer;
    }
}

직접 한줄씩 전부 검사하는 방식으로 접근하다가 틀려서 dp라는 힌트를 받고 해결했습니다.