정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.
function solution(numbers) {
/*
numbers 요소에 접근한다.
i 번째 요소를 기준으로 i 번째 이후 요소들을 하나씩 더한다.
더한 결과값을 객체의 담는다.
이 때 객체의 동일한 값이 있는 경우 건너뛴다.
객체가 완성되면 객체의 키 값들을 다 불러와 배열로 만든다.
이후 해당 배열을 오름차순 정렬하고 answer에 담는다.
answer을 리턴한다.
*/
let obj = {};
for (let i = 0; i < numbers.length; i++) {
for (let j = i + 1; j < numbers.length; j++) {
let sum = numbers[i] + numbers[j];
if (obj[sum] === undefined) {
obj[sum] = 0;
}
}
}
let newNumbers = [];
for (const key in obj) {
let num = parseInt(key);
newNumbers.push(num);
}
newNumbers.sort((a, b) => a - b);
var answer = newNumbers;
return answer;
}
function solution(numbers) {
/*
answer 요소들은 유일한 값들이다. -> set 객체를 이용하자!
이중 for문을 이용해 각 요소들을 더한 값을 임시 배열에 넣는다.
임시 배열을 인자로 한 Set객체를 만든다.
만들면서 중복된 값들은 제거된다.
만들어진 Set객체를 배열로 바꾼다.
바꾼 배열을 정렬한다.
정렬한 배열은 answer에 담고 리턴한다.
*/
let temp = [];
for (let i = 0; i < numbers.length; i++) {
for (let j = i + 1; j < numbers.length; j++) {
temp.push(numbers[i] + numbers[j])
}
}
let newNumbers = [...new Set(temp)];
newNumbers.sort((a, b) => a - b);
var answer = newNumbers;
return answer;
}
Set 객체에 대해 새로 배웠다. Set객체에 대해선 따로 블로깅 하겠다. 문제를 풀면서 각 요소들을 중복되지 않게 하기 위해 객체를 이용했는데 객체를 이용하게 되면 string 타입으로 값을 읽어오기 때문에 parseInt로 정수화 시켜줘야 했다. 테스트는 통과했지만 레퍼런스 코드를 봐보니 Set을 이용해서 풀었고 요구사항들을 다 지켜가면서 답을 구할 수 있었다. Set에 대해 처음 알게 되었는데 Set에 대해 공부하면서 잘 써먹어야겠다.