Contents
https://school.programmers.co.kr/learn/courses/30/lessons/12913
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제

설명
n행 4열의 점수가 적혀있는 땅이 주어진다
1행부터 한행씩 내려오면서 4열 중 하나만 밟으면서 내려와야 한다
같은 열은 다음 행에서 또 밟을 수 없다
나올 수 있는 최댓값을 반환

예로 이런 땅이 있다면
100 -> 9 -> 100 = 209 (x) ( 2행과 3행의 위치가 같아서 안됨)
100 -> 1 -> 100 = 201 (o) ( 각 행의 위치가 다 다름)
이런식이다
import java.util.*;
/*
* 프로그래머스 땅따먹기
* 땅은 n행 4열, 모든 칸에는 점수가 있음
* 1행부터 한행씩 내려오면서 4칸 중 하나만 밟으면서 내려와야 함
* 같은 열 또 밟을 수 없다
* 나올 수 있는 최댓값 반환
*/
class Solution {
int solution(int[][] land) {
for (int i = 0; i < land.length - 1; i++) {
// 각 열의 최댓값, 두번째 최댓값, 최댓값의 자리
int max1 = -1;
int max2 = -1;
int idx1 = -1;
for (int j = 0; j < 4; j++) {
int tmp = land[i][j];
if (tmp > max1) { // 새로운 1등 발견
max2 = max1; // 기존 1등이 2등으로 밀림
max1 = tmp;
idx1 = j; // 자리 기록
} else if (tmp > max2) { // 1등보다 작고, 2등보다 큰 경우
max2 = tmp;
}
}
// 다음 열에 더해주기
for (int j = 0; j < 4; j++) {
// 같은 자리가 아니라면 최댓값
// 같은 자리라면 두번째 최댓값 더해주기
if (j != idx1) {
land[i + 1][j] += max1;
} else {
land[i + 1][j] += max2;
}
}
}
return Arrays.stream(land[land.length - 1]).max().getAsInt();
}
}
그래서 각 행마다 최댓값과 두번째 최댓값 그리고 최댓값의 자리를 구해서
다음 행의 각 열마다 최댓값을 더해주었다
만약 전 행의 최댓값과 같은 열이라면 구해두었던 두번째 최댓값을 더해주었다
반환은 마지막 행의 최댓값을 반환해주어 마무리해주었다
요즘 DP 문제를 몇개 풀었더니 DP식으로 문제를 풀려고 하는거 같다
나름 재밌는 문제였음
Algo/프로그래머스/2/12913. 땅따먹기 at main · qTeTp/Algo
This is an auto push repository for Baekjoon Online Judge created with [BaekjoonHub](https://github.com/BaekjoonHub/BaekjoonHub). - qTeTp/Algo
github.com

'프로그래머스' 카테고리의 다른 글
| [프로그래머스] 정수 삼각형(JAVA) (0) | 2025.11.30 |
|---|---|
| [프로그래머스] 택배 상자 꺼내기 (JAVA) (0) | 2025.11.29 |
| [프로그래머스] 프로세스 (JAVA) (1) | 2025.06.02 |
| [프로그래머스] 완주하지 못한 선수 (JAVA) (0) | 2025.05.30 |
| [프로그래머스] 타겟 넘버 (JAVA) (0) | 2025.02.17 |