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) //오름차순으로 정렬해줬다.