[프로그래머스] 두 개 뽑아서 더하기 (JavaScript)

🤷‍ 문제 설명

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

제한사항

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

🙄 나의 풀이

주절주절....ㅎ.... 어떻게든 기초지식으로 통과는 했다!

function solution(numbers) {
    var answer = [];
    let arr = [];
    for (let i=0; i< numbers.length; i++){
        for (let j=i+1; j<numbers.length; j++){
            let sum = numbers[i]+numbers[j];
            arr.push(sum);
            
        }
    }
    for (let k=0; k<arr.length; k++){
        if (answer.indexOf(arr[k]) === -1)  
            answer.push(arr[k])
    }
    answer.sort(function(a, b){ return a-b; });
    return answer;
}

😮 다른 사람 풀이

Set을 사용한 Case


function solution(numbers) {
    const temp = []

    for (let i = 0; i < numbers.length; i++) {
        for (let j = i + 1; j < numbers.length; j++) {
            temp.push(numbers[i] + numbers[j])
        }
    }

    const answer = [...new Set(temp)]

    return answer.sort((a, b) => a - b)
}

내가 푼 풀이와 로직은 유사하지만 훨씬 짧은 코드

function solution(numbers) {
    var answer = [];
    //들어온 배열의 요소를 확인한다.
    //배열의 두개 요소를 뽑아 덧셈한 모든 경우의 수를 구한다.
    //중복된 값은 제거한다.
    //배열값을 리턴한다.
    for(let i=0; i<numbers.length-1; i++){
        for(let j=i+1; j<numbers.length; j++){
           if(answer.indexOf(numbers[i]+numbers[j])===-1){
               answer.push(numbers[i]+numbers[j]) 
           } 
        }
    }

    return answer.sort((a,b)=>a-b);
}

🤔 느낀점

  • Set 기능 알아두기 !

  • 처음에 sort()로 배열을 오름차순으로 정렬하려고 했는데 비교함수를 지정하지 않고 기본 sort()만 호출했을 때는 문자열 비교를 한다. 숫자 비교를 하려면 비교함수를 지정해야 한다.

  • 숫자 정렬

    var score = [4, 11, 2, 10, 3, 1]; 
    
    /* 오류 */
    score.sort(); // 1, 10, 11, 2, 3, 4 
                  // ASCII 문자 순서로 정렬되어 숫자의 크기대로 나오지 않음
    
    /* 정상 동작 */
    score.sort(function(a, b) { // 오름차순
        return a - b; //음수가 나오면 a가 b보다 작다
        // 1, 2, 3, 4, 10, 11
    });
    
    score.sort(function(a, b) { // 내림차순
        return b - a;
        // 11, 10, 4, 3, 2, 1
    });

좋은 웹페이지 즐겨찾기