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
'자바 > 코딩테스트' 카테고리의 다른 글
[프로그래머스] 오픈채팅방 - Java(자바) (0) | 2024.04.02 |
---|---|
[프로그래머스] 스킬트리 - Java(자바) (0) | 2024.04.02 |
[프로그래머스] 방문 길이 - Java(자바) (1) | 2024.04.01 |
[프로그래머스] [3차] 압축 - Java(자바) (1) | 2024.03.29 |
[프로그래머스] k진수에서 소수 개수 구하기 - Java(자바) (0) | 2024.03.28 |