배열 내 특정값 삭제


:raising_hand: 알고리즘 공부 간 기록이 필요한 문제들에 대한 정리를 기록하는 포스트 입니다.


1. 문제 요건


  • 주어진 배열 내 특정값을 찾아 제거한다.

2. 코드


function solution(arr) {
  let testArr = arr;
  // reduce 를 통한 arr 배열의 합 구하기
  let sum = arr.reduce((a, b) => a + b, 0);
  // 이중 for 문을 통해 배열 내 탐색
  for (let i = 0; i < 8; i++) {
    for (let j = i + 1; j < 9; j++) {
      if (sum - (testArr[i] + testArr[j]) === 100) {
        // i 먼저 지우고 j 를 지우게되면 index 가 틀려지기 때문에 순서 변경
        testArr.splice(j, 1);
        testArr.splice(i, 1);
      }
    }
  }

  return testArr.reduce((result, v) => result + v, 0);
}

let arr = [20, 7, 23, 19, 10, 15, 25, 8, 13];
console.log(solution(arr));

3. 결과정리


특별히 어려운 문제는 아니다.

다만, 배열의 합을 구할때 reduce 함수를 활용하는 방법을 간단하게 알아볼 수 있다.

배열 내에서 두 값을 비교하며 특정 조건에 만족하는 인덱스를 찾게 될 때는 splice 함수를 활용하여 지울 수 있다.

이때 주의해야 할 점은 위 코드에서 볼 수 있듯이 마지막에 조건에 맞는 인덱스를 지울 때 i 인덱스를 먼저 지우게 되면 i 인덱스가 사라짐으로 인해 순서가 앞으로 당겨지므로 뒷 숫자부터 삭제하도록 하는 부분이다.

물론 i 부터 진행 후 j-1 로 변경해도 무방하다.