코딩테스트
[프로그래머스] 땅따먹기_Java
오류유발자
2024. 5. 7. 14:38
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/12913
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제
1. 땅(land)은 총 N행 4열로 이루어져 있고, 모든 칸에는 점수가 쓰여 있다.
2. 1행부터 땅을 밟으며 한 행씩 내려올 때, 얻을 수 있는 점수의 최댓값을 return하라.
3. 단, 한 행씩 내려올 때, 같은 열을 연속해서 밟을 수 없는 특수 규칙이 있다.
4. 행의 개수 N은 100,000 이하의 자연수
5. 열의 개수는 4개이고, 땅(land)은 2차원 배열
6. 점수 : 100 이하의 자연수
문제 풀이
다이나믹프로그래밍을 이용하여 각 행별로 최고점을 계산하여 마지막 행까지 구한다.
1. 각 단계별 총합 점수를 계산할 int [][] result을 만들고, 1행은 기존의 값과 동일하게 넣어준다.
2. 2행부터 N행까지 각 행에 들어갈 최대 총합 점수를 담아준다.
3. N행의 모든 열의 점수들을 비교하여 최대 점수를 return 한다.
코드
class Solution {
int solution(int[][] land) {
int answer = 0;
int[][] result = new int [land.length][land[0].length];
result[0] = land[0];
for(int i=1;i<land.length;i++){
int len =land[i].length;
for(int j =0; j<len; j++){
int max = 0;
for(int k = 0; k<len; k++){
if( j ==k) continue;
max = Math.max(max,land[i][j]+result[i-1][k]);
}
result[i][j]=max;
}
}
int max = 0;
for(int n : result[result.length-1]) max = Math.max(max,n);
return max;
}
}
실행결과


