https://programmers.co.kr/learn/courses/30/lessons/12913
// 1차 시도 실패 (테케만 통과)
function solution(land) {
let answer = [];
let max = 0;
let index = -1;
for(let i = 0; i < land.length; i++) {
for(let j = 0; j < 4; j++) {
if(index !== j) {
max < land[i][j] ? max = land[i][j] : max;
}
}
index = land[i].indexOf(max);
answer.push(max);
max = 0;
}
return answer.reduce((acc,cur) => acc + cur);
}
// 2차 시도 실패.. (테케만 통과)
function solution(land) {
let answer = [];
let max = Math.max(...land[0]);
let index = land[0].indexOf(max);
for(let i = 0; i < land.length; i++) {
if(i === 0) {
answer.push(max);
} else {
land[i][index] = 0;
max = Math.max(...land[i]);
index = land[i].indexOf(max);
answer.push(max);
}
}
return answer.reduce((acc,cur) => acc + cur);
}
인덱스가 겹치지 않게 큰 값만 더하면 된다고 생각했는데
완전 잘못 접근하고 있었다 😭
// 다른 분의 풀이 (1)
function solution(land) {
let answer = 0;
for(let i = 0; i < land.length; i++){
for(let j = 0; j < 4; j++){
if(i === 0){
continue;
} else {
let arr = land[i-1].slice();
arr[j] = 0;
land[i][j] += Math.max.apply(null, arr);
answer = Math.max(land[i][j], answer);
}
}
}
return answer;
}
동적 계획법이라는 자료구조로 접근해야 하구나 (...)
이 분 풀이를 보니 왜 이전 배열의 원소들과 하나씩 더한 것으로 비교하여
접근해야 하는지 알 수 있었다...!
처음엔 이해 하나도 안갔는데 console 찍어보면서 어떻게 계산되는건지 보니까
정말 어메이징 그 자체,,,,👏🏻👏🏻
// 다른 분의 풀이 (2)
function solution(land) {
var answer = 0;
return Math.max(...land.reduce((a, c) => {
return [
c[0] + Math.max(a[1], a[2], a[3]),
c[1] + Math.max(a[0], a[2], a[3]),
c[2] + Math.max(a[0], a[1], a[3]),
c[3] + Math.max(a[0], a[1], a[2]),
];
}, [0, 0, 0, 0]));
}
와.. 리듀스로..
문제에선 4행이지만 4행보다 더 클 경우를 대비해서
(1) 풀이 잘 봐나야지 📝