알고리즘 문제풀이- 두개 뽑아서 더하기

공부중인 개발자·2021년 9월 2일
0

알고리즘

목록 보기
1/63
post-thumbnail

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

  • 입력값
    정수 배열

  • 출력값
    정수 배열(두 수를 더해서 만들 수 있는 모든 값(중복X)을 오름차순으로 정렬한 배열)

먼저 수도코드를 짜보자면
1. 모든 숫자는 서로 한번 씩 더해줘야한다 -> 이중반복을 이용하면 편하게 각각을 더할 수 있다.
2. 더해진 값 중 중복되는 값은 없애준다.
3. 오름차순으로 정렬한다.

내가 푼 문제 풀이

function solution(numbers) {
    var answer = [];
    for (let i = 0; i<numbers.length-1; i++) {
        for (let j = i+1; j<numbers.length; j++) {
            answer.push(numbers[i]+numbers[j])
        }
    }
     return Array.from(new Set(answer)).sort((a,b) => a-b);
}

더해진 값 중 중복되는 값을 없애준 방법은 Set 을 이용했다.
Set - MDN

MDN을 살펴보면 자료형에 관계 없이 원시 값과 객체 참조 모두 "유일한" 값을 저장 할 수 있다고한다.

개발자 도구를 통해 알아본 set의 형태는 이렇게 되어있고 프로토타입이 Set이라고 되어 있다.
이 값들을 풀어주기 위해 필요한것이 spread operator 와 Array.from() 이 있다.

spread operator은 배열, 문자열, 객체등의 반복 가능한 객체를 개별요소로 분리하는 것이고
Array.from() 메서드는 유사 배열 객체(array-like object)나 반복 가능한 객체(iterable object)를 얕게 복사해 새로운Array 객체를 만드는 것이다.
Array.from()-MDN

그렇게 Set을 통해 중복된 값을 삭제한 뒤 sort((a,b) => a-b) //오름차순으로 정렬해줬다.

profile
열심히 공부하자

0개의 댓글