자바/코딩테스트

[프로그래머스] 땅따먹기 - Java(자바)

대전집주인 2024. 4. 2. 11:20
728x90
SMALL

 

문제 이해

  • 한 행씩 내려가면서 땅따먹는다. 점수 최대로 나오게 땅을 따먹어라
  • 한 행씩 내려올 때 같은 열을 연속으로 밟을 수 없다.
  • 예제에는 안나왔지만 같은 행에 같은 점수가 나올수 있고 그 점수가 최대값일수 있다고 생각해야한다.
  • 한 행씩 내려오면서 연속된 열 제외 위 아래 열의 값을 더하여 dp[i][j] 에 나올 수 있는 max값을 배치한다.
  • 마지막 행에 나오는 점수중 max값이 땅따먹기에서 나올 수 있는 최대의 점수이다.
import java.util.*;
class Solution {
    int solution(int[][] land) {
        int answer = 0;
        
        // 0행은 [0,0,0,0]
        int[][] dp = new int[land.length+1][4];
        
        for(int i = 1; i<land.length+1; i++){
            for(int j = 0; j<4; j++){
                for(int k = 0; k<4; k++){
                    
                    if(j == k) continue;
                    
                    dp[i][j] = Math.max(dp[i][j], land[i-1][j] + dp[i-1][k]);
                    
                    answer = Math.max(dp[i][j], answer);
                }
            }
        }

        return answer;
    }
}
728x90
LIST