[Programmers] 두 개 뽑아서 더하기 (JS)

nRecode·2021년 1월 15일
0

Algorithm

목록 보기
28/48

문제

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

입출력 예
numbers: [2,1,3,4,1]
result: [2,3,4,5,6,7]

접근

이 문제는 배열의 0번째 인덱스를 1~마지막 인덱스까지 각 합한 값을 푸시하고, 다음은 1번째 인덱스를 2~마지막 인덱스까지 합한 값을 푸시하는 방법을 사용했다

풀이

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

+

나는 이중 for문안에 includes 메소드를 사용하여 push하기 전 조사하는 방법을 사용했는데 다른 사람이 푼 해답에서 Set을 사용하는 방법을 보았다.

Set객체는 자료형과 관계없이 원시 값과 객체 참조 모두 유일한 값을 저장해 새로운 Set객체를 만든다.

const set1 = new Set([1, 2, 3, 4, 5,5,4]);
set1 // Set(5) {1, 2, 3, 4, 5}
const set2 = new Set('asdfsdfdf')
set2 //Set(4) {"a", "s", "d", "f"}

간략하게 고쳐보면 아래와 같다.

function solution(numbers) {
    var temp = [];
    for(let i = 0; i < numbers.length - 1; i++){
       for(let j = i + 1; j < numbers.length; j++){
           temp.push(numbers[i] + numbers[j]);
       }
    }
    var answer = [...new Set(temp)];

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

temp에 연산한 값을 우선 모두 push하고 Set을 이용하여 중복값이 사라진 Set객체를 만든다. 그리고 spread operator와 []를 사용하여 타입을 array로 한다. 그리고 sort값을 리턴한다.

profile
안정성, 확장성 있는 서버를 구축하고 가꾸는 개발자를 목표로 공부하고 있습니다. 🤔🤔🤔🤔 부족하기에 맞지 않는 내용이 있을 수 있습니다. 가감없이 피드백 해주시면 정말 감사하겠습니다..🙏

0개의 댓글