[CodeKata] 두 개 뽑아서 더하기

ryan·2021년 4월 8일
0

CodeKata JS

목록 보기
11/26
post-thumbnail

링크

참고

나의 풀이

function solution(numbers) {
  var answer = [];

  for (let i = 0; i < numbers.length; i++) {
    for (let j = 0; j < numbers.length; j++) {
      if (i !== j) {
        answer.push(numbers[i] + numbers[j]);
      }
    }
  }

  //   result 변수에 filter 메서드를 사용해서 answer 배열의 item의 index와 index가 같은 값만 출력한 새로운 배열을 만듦.
  const result = answer.filter((item, index, self) => {
    return self.indexOf(item) === index;
  });

  // result 오름차순으로 정렬
  result.sort((a, b) => a - b);
  return result;
}

answer배열의 중복된 값을 어떻게 제거할 지를 고민하다가, filter 메서드를 사용해서 중복된 값이 없는 배열을 만드는 방법을 알 수 있었다.

더 나은 풀이

function solution(numbers) {
  var answer = [];

  // 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열로 만들면
  for (let i = 0; i < numbers.length; i++) {
    for (let j = 0; j < numbers.length; j++) {
      if (i !== j) {
        answer.push(numbers[i] + numbers[j]);
      }
    }
  }

  // Set을 사용해서 유일한 value만 저장한다.
  const result = [...new Set(answer)];

  // result 오름차순으로 정렬
  result.sort((a, b) => a - b);
  return result;
}

더 나은 방법으로는 Set을 사용하는 건데, Set은 객체로 자료형에 상관 없이 원시 값과 객체 참조 모두 유일한 값을 저장할 수 있다고 한다. Spread OperatorSet을 사용하니, 나의 풀이보다 테스트 케이스에서 더 빠르게 통과하는 것을 볼 수 있었다.

profile
👨🏻‍💻☕️ 🎹🎵 🐰🎶 🛫📷

0개의 댓글