[ 2024.07.19 ] TIL

yy·2024년 7월 19일

개발일지

목록 보기
86/122
  1. 땅따먹기 programmers 문제
function solution(land) {
  let val = Math.max(...land[0]);
  let idx = land[0].indexOf(val);
  let answer = val;

  for (let i = 1; i < land.length; i++) {
    let arr = land[i].filter((val, ind) => ind !== idx);
    val = Math.max(...arr)
    idx = arr.indexOf(val)
    answer += val;
  }
  return answer;
}

위의 문제를 보고 이렇게 코드를 작성했는데 예시 테스트 케이스는 통과를 했으나 실제 코드를 실행해보면 다 실패가 뜨는게 아닌가?
각 배열의 최대값을 구해서 더해주면 2중 배열의 최대값이 되는줄 알았다. 근데 간과한 사실. 각 배열의 최대값이 아니더라도 중복된 인덱스값을 고려해서 값을 더하면 진짜 최대값을 구할 수 있었던 것.

function solution(land) {
  for (let i = 1; i < land.length; i++) {
    for (let j = 0; j < 4; j++) {
      let maxPrev = Math.max(...land[i - 1].filter((_, idx) => idx !== j));
      land[i][j] += maxPrev;
      console.log('maxPrev', maxPrev)
      console.log(`${j}번째`, land)
    }
  }
  return Math.max(...land[land.length - 1]);
}

위의 코드는 어떻게 풀면 좋을지 생각이 도저히 나지않아 chapGPT한테 물어본 것.
원 배열land의 전 최대값의 인덱스와 동일하지 않고, 해당 배열에서의 최대값을 찾아서 다음 배열에 더해줬다. 그리고 마지막 배열에서 가장 최대값을 찾으면 그게 답이 되는 방법이었다.
난 왜 이런 방법을 생각하지 못할까..!

profile
시간이 걸릴 뿐 내가 못할 건 없다.

0개의 댓글