728x90

문제


https://programmers.co.kr/learn/courses/30/lessons/68644

 

코딩테스트 연습 - 두 개 뽑아서 더하기

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

programmers.co.kr

 

코드


function solution(numbers) {
    let tmp = [];
    let answer = [];
    const len = numbers.length;
    let sum = 0;

    for (let i=0; i<len; i++) { //배열에서 서로다른 두 수를 뽑아
        for (let j=i+1; j<len; j++) {
            sum = numbers[i]+numbers[j];
            tmp.push(sum); //더한 값을 tmp에 push
        }
    }

    tmp.forEach((i) => { //tmp 배열의 중복을 제거하여 answer에 push
        if (!answer.includes(i)) {
            answer.push(i);
        }
    });

    answer.sort(function(a, b) { //answer 배열 오름차순 정렬
        return a-b;
    });

    return answer;
}

 

후기


  • 문제를 보자마자 이중 for문을 통해 각 자리별 sum을 배열에 담아 중복을 제거하고 정렬해야겠다고 생각했다
  • 중복을 제거하는 과정에서 불필요하게 코드가 길어진 게 아쉬웠다
  • 왜냐하면 다른 분의 풀이에서는 밑의한줄로 끝내버렸기 때문
  • const answer = [...new Set(temp)]
     
  • 이 코드에서 뿐만 아니라 배열에 관련된 문제를 풀 때 다른 분들의 풀이를 보면 종종 '...' 문법을 쓰는 것을 볼 수 있었다. 이참에 찾아보았는데, '...'은 쉽게 말해 바로 뒤에나오는 변수 등의 '전체'를 의미한다
  • ex) const a = [1,2,3]; 일 때, const b = [...a,4,5]; 이면, b = [1,2,3,4,5]가 된다
  • 정렬을 할 때도, asnwer.sort() 만 했었는데, 자바스크립트에서는 sort()안에 어떠한 조건을 주지 않으면 기본적으로 유니코드에 따라 오름차순 정렬이 된다는 것을 알았다. 그래서 내가 원하는 진짜 오름차순을 하기 위해서는 위와 같은 조건이 필요했다

+ Recent posts