Front-End

vsoghlv@naver.com

알고리즘 두 개 뽑아서 더하기

문제 설명

정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.

제한사항

numbers의 길이는 2 이상 100 이하입니다. numbers의 모든 수는 0 이상 100 이하입니다.

입출력 예

numbers result
[2,1,3,4,1] [2,3,4,5,6,7]
[5,0,2,7] [2,5,7,9,12]

문제풀이

function solution(numbers) {
  var answer = [];
  for (let i = 0; i < numbers.length; i++) {
    for (let j = 0; j < numbers.length; j++) {
      if (j !== i) answer.push(numbers[j] + numbers[i]);
    }
  }
  return answer
    .filter((n, index) => answer.indexOf(n) === index)
    .sort((a, b) => {
      return a - b;
    });
}

먼저 이중 포문을 돌면서 받은 numbers 의 j 번째 요소와 i 번째 요소를 더하도록 해줬다. 이 때 같은 인덱스의 값이 더해지지 않도록 if 문을 통해 막아줬다.

그 후 리턴하기 전 filter 를 사용해 같은 값들을 없에주고 정렬을 위해 sort 를 사용해줬다.

이중 포문을 map, reduce 등을 다른 방법을 통해 더 줄일 수 없을까 한참 고민했었는데 map 등을 사용해도 이중으로 들어가야 되는 것 같아 개인적으로 가장 알아보기 쉬운 이중 포문을 그대로 사용했다.