프로그래머스 12913번 문제 "땅따먹기" Lv.2 - 파이썬, 자바
[프로그래머스] 땅따먹기 Lv.2 - [파이썬/python] [자바/java]
💻 문제 설명
땅따먹기 게임을 하려고 합니다. 땅따먹기 게임의 땅(land)은 총 N행 4열로 이루어져 있고, 모든 칸에는 점수가 쓰여 있습니다. 1행부터 땅을 밟으며 한 행씩 내려올 때, 각 행의 4칸 중 한 칸만 밟으면서 내려와야 합니다.
단, 땅따먹기 게임에는 한 행씩 내려올 때, 같은 열을 연속해서 밟을 수 없는 특수 규칙이 있습니다.
예를 들면,
| 1 | 2 | 3 | 5 |
| 5 | 6 | 7 | 8 |
| 4 | 3 | 2 | 1 |
로 땅이 주어졌다면, 1행에서 네번째 칸 (5)를 밟았으면, 2행의 네번째 칸 (8)은 밟을 수 없습니다.
마지막 행까지 모두 내려왔을 때, 얻을 수 있는 점수의 최대값을 return하는 solution 함수를 완성해 주세요. 위 예의 경우, 1행의 네번째 칸 (5), 2행의 세번째 칸 (7), 3행의 첫번째 칸 (4) 땅을 밟아 16점이 최고점이 되므로 16을 return 하면 됩니다.
🚨 제한사항
- 행의 개수 N : 100,000 이하의 자연수
- 열의 개수는 4개이고, 땅(land)은 2차원 배열로 주어집니다.
- 점수 : 100 이하의 자연수
!!!정답 주의!!!
🌟 소스 코드
[Python] 파이썬 코드
def solution(land):
# DP(동적 프로그래밍) 사용
# 현재 행의 숫자 4개에
# 전 행의 숫자를 더했을 때(같은 열 제외)의 값들 중에서
# 가장 컷을 때의 값을 현재 행에 넣으면서 나아간다.
# 1 ~ 마지막 행 순회(0번째 행보다 이전의 행은 없으니 1행부터 시작한다.)
for i in range(1, len(land)):
# 행 숫자는 4개
for j in range(4):
# 현재 행(land[i][j])의 숫자 4개에
# 같은 행을 제외한 전의 행(land[i-1][j])을 더해가며
# 최대값이면 현재 행(land[i][j])에 더하기
land[i][j] += max(land[i-1][:j] + land[i-1][j+1:])
# for문을 통해 순회하면서 차례대로 행의 누적값을 쌓았으니
# 마지막 행의 최댓값이 답
return max(land[-1])
[Java] 자바 코드
import java.util.Arrays;
class Solution {
int solution(int[][] land) {
// DP(동적 프로그래밍) 사용
// 현재 행의 숫자 4개에
// 전 행의 숫자를 더했을 때(같은 열 제외)의 값들 중에서
// 가장 컷을 때의 값을 현재 행에 넣으면서 나아간다.
// 1 ~ 마지막 행 순회(0번째 행보다 이전의 행은 없으니 1행부터 시작한다.)
for(int i=1; i<land.length; i++){
// 행 숫자는 4개
for(int j=0; j<4; j++){
// 현재 행(land[i][j])의 숫자 4개에
// 같은 행을 제외한 전의 행(land[i-1][j])을 더했을 때
// 값이 가장 큰 경우를 구하기
int max = 0;
for(int k=0; k<4; k++){
if ((j != k) && (land[i-1][k] > max)){
max = land[i-1][k];
}
}
// 구한 최대값을 현재 행(land[i][j])에 더하기
land[i][j] += max;
}
}
// for문을 통해 순회하면서 차례대로 행의 누적값을 쌓았으니
// 마지막 행의 최댓값이 답
return Arrays.stream(land[land.length-1]).max().getAsInt();
}
}
🏳🌈 테스트 결과
[Python] 파이썬 - 테스트 결과 | [Java] 자바 - 테스트 결과 |
![]() |
![]() |
728x90
'코딩테스트' 카테고리의 다른 글
[프로그래머스] 뒤에 있는 큰 수 찾기 - Lv.2 (70) | 2024.01.29 |
---|---|
[프로그래머스] 124 나라의 숫자 - Lv.2 (57) | 2024.01.22 |
[프로그래머스] 야근 지수 - Lv.3 (49) | 2024.01.16 |
[프로그래머스] H-Index - Lv.2 (35) | 2024.01.10 |
[프로그래머스] n^2 배열 자르기 - Lv.2 (34) | 2024.01.07 |