정수 배열 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값을 리턴한다.