두 개 뽑아서 더하기

Judo·2020년 12월 15일
0
post-custom-banner

문제


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

제한사항


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

입출력 예


내가 푼 코드


function solution(numbers) {
    /*
      numbers 요소에 접근한다.
      i 번째 요소를 기준으로 i 번째 이후 요소들을 하나씩 더한다.
      더한 결과값을 객체의 담는다.
      이 때 객체의 동일한 값이 있는 경우 건너뛴다.
      객체가 완성되면 객체의 키 값들을 다 불러와 배열로 만든다.
      이후 해당 배열을 오름차순 정렬하고 answer에 담는다.
      answer을 리턴한다.
    */
     let obj = {};
     for (let i  = 0; i < numbers.length; i++) {
         for (let j = i + 1; j < numbers.length; j++) {
             let sum = numbers[i] + numbers[j];
             if (obj[sum] === undefined) {
                 obj[sum] = 0;
             }
         }
     }
     let newNumbers = [];
     for (const key in obj) {
         let num = parseInt(key);
         newNumbers.push(num);
     }
     newNumbers.sort((a, b) => a - b);
   
    var answer = newNumbers;
    return answer;
}

레퍼런스 코드


function solution(numbers) {

    /*
      answer 요소들은 유일한 값들이다. -> set 객체를 이용하자! 
      이중 for문을 이용해 각 요소들을 더한 값을 임시 배열에 넣는다.
      임시 배열을 인자로 한 Set객체를 만든다. 
      만들면서 중복된 값들은 제거된다.
      만들어진 Set객체를 배열로 바꾼다.
      바꾼 배열을 정렬한다.
      정렬한 배열은 answer에 담고 리턴한다.
    */
    let temp = [];
    for (let i = 0; i < numbers.length; i++) {
        for (let j  = i + 1; j < numbers.length; j++) {
            temp.push(numbers[i] + numbers[j])
        }
    }
    let newNumbers = [...new Set(temp)];
    newNumbers.sort((a, b) => a - b);
    
    var answer = newNumbers;
    return answer;
}

배운점


Set 객체에 대해 새로 배웠다. Set객체에 대해선 따로 블로깅 하겠다. 문제를 풀면서 각 요소들을 중복되지 않게 하기 위해 객체를 이용했는데 객체를 이용하게 되면 string 타입으로 값을 읽어오기 때문에 parseInt로 정수화 시켜줘야 했다. 테스트는 통과했지만 레퍼런스 코드를 봐보니 Set을 이용해서 풀었고 요구사항들을 다 지켜가면서 답을 구할 수 있었다. Set에 대해 처음 알게 되었는데 Set에 대해 공부하면서 잘 써먹어야겠다.

profile
즐거운 코딩
post-custom-banner

0개의 댓글