Algorithm
프로그래머스 땅따먹기 공부
세모난 야구공
2022. 5. 5. 01:52
처음 푼 코드
문제점 : 모든 경우에 수를 다 파악함 -> 최적화 안됨
function solution(land) {
let result = [];
// bfs 사용
function repeat(arrs, num, idx) {
// 탈줄조건
if (arrs.length === 0) {
result.push(num);
console.log('pushresult:', num);
console.log();
console.log();
return;
}
let arr = arrs.shift();
for (let i = 0; i < arr.length; i++) {
// 전에 사용했었언 idx이면 넘어감
if (idx === i) {
continue;
}
console.log('arrs:', arrs);
console.log('arr:', arr);
console.log('i:', i);
console.log('num+arr[i]:', num + arr[i]);
// 함수실행
repeat(arrs.slice(), num + arr[i], i);
console.log();
}
}
해당코드는 오류가 나옴
실패 (signal: aborted (core dumped))
수정후
function solution(land) {
//열 인덱스만큼 반복
for (let rowIndex = 1; rowIndex < land.length; rowIndex++) {
// 행 인덱스 만큼 반복
for (let colIndex = 0; colIndex < land[0].length; colIndex++) {
// land의 각각의 위치에 기존값에 이전에 더할수 있는 숫자중 가장 최댓값 더하기
console.log('rowIndex:', rowIndex);
console.log('colIndex:', colIndex);
console.log('더하는 최대 배열:', [
...land[rowIndex - 1].slice(0, colIndex),
...land[rowIndex - 1].slice(colIndex + 1),
]);
land[rowIndex][colIndex] += Math.max(
...land[rowIndex - 1].slice(0, colIndex),
...land[rowIndex - 1].slice(colIndex + 1)
);
console.log('land[rowIndex][colIndex]:', land[rowIndex][colIndex]);
}
}
console.log('최댓값 전의 배열확인:', land[land.length - 1]);
return Math.max(...land[land.length - 1]);
}
배운점
저는 코드를 무조건 흐름에 따라서 진행을 확인하면 된다고 생각하였으나 코드의 복잡도가 너무 올라가서 고민을 많이 하였는데
흐름을 조금 바꾸는 것만으로도 효율성이 확 달라진다는 것을 알게 되었다.
관련 자료
github.com/ChooHongWook/test_argoritem2/