정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.
numbers | result |
---|---|
[2,1,3,4,1] | [2,3,4,5,6,7] |
[5,0,2,7] | [2,5,7,9,12] |
입출력 예 설명
입출력 예 #1
입출력 예 #2
function solution(numbers) {
let answer = [];
for(let i = 0; i < numbers.length; i++){
let filNum = numbers.filter(el => el === numbers[i]);
if(filNum.length !== 1){ // numbers안에 중복되는 숫자가 있는경우.
let sameNum = numbers.splice(numbers.indexOf(numbers[i]), 1)[0];
numbers.map(el => answer.push(sameNum + el));
} else {
numbers.filter(el => {
if(el !== numbers[i]) {
answer.push(numbers[i] + el);
}
})
}
}
answer.sort((a, b) => a - b); // 오름차순 정렬
return answer.reduce((prev,curr)=> prev.includes(curr) ? prev : [...prev, curr],[])
}
console.log(solution([2, 1, 3, 4, 1])); // [2,3,4,5,6,7]
풀이
마치며
reduce()
함수 대신 새로 생긴 문법인Set
을 사용할수도 있다.
모든 경우의 수를 더했는데 했던 덧셈은 굳이 할 필요가 없었다... 문제의 규칙도 더 신경써서 풀어야겠다...