어떤 수가 주어졌을 때 배열 내의 어떤 항목 두 개를 합쳐야 해당 수가 되는지 찾아라

문제 : 배열 arr이 있고 어떤 수 weight가 주어졌을 때 합쳐서 weight가 되는 배열 내 항목 두 개의 인덱스를 반환하라. 만약 합쳐서 weigth가 되는 항목 두 개가 존재하지 않는 경우 -1을 반환하라.

책에 있는 가장 간단한 방법의 코드이다.

const arr = [1, 2, 3, 4, 5];
const weight = 9;

function findSum(arr, weight) {
  for (let i = 0; i < arr.length; i++) {
    for (let j = i + 1; j < arr.length; j++) {
      if (arr[i] + arr[j] === weight) {
        return [i, j];
      }
    }
  }
  return -1;
}

여기서 배열을 [1, 2, 3, 4, 5, 6, 7]로 바꿔보자. 합쳐서 9가 될 수 있는 수는 [2,7], [3,6], [4,5]로 세 쌍이 존재한다. 하지만 위 코드에서는 한 쌍만 찾아도 바로 return을 하기 때문에 모든 쌍을 찾을 수 없다.

그래서 다음과 같이 수정해보았다.

const arr = [1, 2, 3, 4, 5, 6, 7];
const weight = 9;
const result = [];

function newfindSum(arr, weight) {
  for (let i = 0; i < arr.length; i++) {
    for (let j = i + 1; j < arr.length; j++) {
      if (arr[i] + arr[j] === weight) {
        result.push([i, j]);
      }
    }
  }
  return result.length === 0 ? -1 : result;
}

실행결과 :

profile
프론트엔드 코린이

0개의 댓글