
-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라는 힌트를 받고 해결했습니다.
'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글
| [프로그래머스/Java] 뒤에 있는 큰 수 찾기 (0) | 2026.03.30 |
|---|---|
| [백준/Java] 31519번 A Cappella Recording (0) | 2026.03.30 |
| [프로그래머스/Java] 방문 길이 (0) | 2026.03.29 |
| [백준/Java] 27496번 발머의 피크 이론 (0) | 2026.03.29 |
| [프로그래머스/Java] [1차] 뉴스 클러스터링 (0) | 2026.03.28 |