코딩테스트 연습 30: [프로그래머스] 두 개 뽑아서 더하기

gyomni·2022년 1월 27일
0

Algorithm

목록 보기
30/33
post-thumbnail

출처 : 프로그래머스
사용 언어 : JavaScript

초기 코드

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

내가 작성한 코드

function solution(numbers) {
    var answer = [];
    let sum=0;
    let n=0;
    for(n;n<numbers.length;n++){
        let m=n+1;
         for(m;m<numbers.length;m++){
             if(numbers.indexOf(numbers[n])!==numbers.lastIndexOf(numbers[m])){
                sum=numbers[n]+numbers[m]
                answer.push(sum)
             }
         }
    }
         let num= answer.filter((n,index)=>answer.indexOf(n)===index);
         return  num.sort((a,b)=>a-b);
}

다른 사람 풀이

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)
}

🙍‍♀️ 📝

Set과 확산 연산자로 배열 중복 제거
( Set 객체는 Map 객체에서 값이 없고 키만 있는 것으로 알기! )

Set 객체 생성자는 배열을 인자로 받아서 중복이 없는 Set 객체를 반환하는 특징이 있다.
=> 중복이 없는 배열을 다시 만들 수 있음.

중복 있는 배열 -> Set -> 확산 연산자로 펼침 -> 배열로 생성 과정을 거쳐 중복 없는 배열이 만들어 짐.

단순히 배열의 중복을 없애는 것이 목적이면 좋은 방법!

Filter로 객체 배열의 중복 제거
indexOf() 메서드는 인자로 넘긴 값이 나오는 첫 번째 인덱스를 바로 반환할 수 있지만,
객체가 요소인 배열에서는 객체의 내부 값을 비교해야 하기 때문에 !
비교 함수 정의가 가능한 findIndex()의 인자로 객체의 값(들)을 비교하는 비교 함수를 넘겨서 첫 번째 값이 일치하는 객체의 배열 인덱스를 가져와야 한다!

참고 블로그 : 링크텍스트

처음에 indexOf()만을 가지고 비교하려다 가장 처음의 인덱스만 가져와서 헤맸었다.
그래서lastIndexOf()를 이용해 값은 같고 인덱스는 다른 값을 찾았다.
하지만 findIndex() 를 이용하면 이런 번거로운 과정 없이 한번에 찾을 수 있으니 다음부턴 이 방법을 !
혹은 Set사용을 !😋

또 다른 방법으로는 if(answer.indexOf(numbers[i]+numbers[j])===-1) 인덱스에 값이 안 들어가 있다면 값을 배열에 넣어주기.
if(i===j) continue; 동일한 인덱스는 스킵해주기.
if(!answer.includes(numbers[i]+numbers[k])) includes로 값이 없을 때 넣어주기.
등 여러 방법도 있었다 !!!

includes()
: 배열이 특정 요소를 포함하고 있는지 판별
->arr.includes(valueToFind[, fromIndex])

const array1 = [1, 2, 3];

console.log(array1.includes(2));
// expected output: true

const pets = ['cat', 'dog', 'bat'];

console.log(pets.includes('cat'));
// expected output: true

console.log(pets.includes('at'));
// expected output: false

참고 : 자바스크립트 배열의 중복을 제거하는 방법

profile
Front-end developer 👩‍💻✍

0개의 댓글