정수 배열 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 sum=[];
let sum_arr = [];
//매개 변수 만큼 배열을 반복하는데 2번과 같이 더하려면 2차원으로 만들어야 한다.
for (let i = 0; i < numbers.length; i++) {
//i+1 만큼에서부터 시작하여 중복되지 않게 더한다.
for (let j = i+1; j < numbers.length; j++) {
//이때 10의 자리가 넘어가면 1과 0 인 2개의 수로 인식하기 때문에 콤마를 추가한다.
sum += numbers[i] + numbers[j] +',';
}
}
// 단순 문자열로 연결된 값들을 콤마를 기준으로 새로운 배열로 만든다.
sum_arr = sum.split(',')
// 새로운 배열만큼으로 반복을 시켜 문자열형태를 숫자형으로 형변환 시킨다.
for (let i = 0; i < sum_arr.length; i++) {
sum_arr[i] = parseInt(sum_arr[i])
}
sum_arr.sort((a,b) => a - b);
//중복된 값들을 처리한다. (NaN을 제외시키기도 한다. )
sum_arr = sum_arr.filter((val, idx)=> {
return sum_arr.indexOf(val) === idx;
})
return sum_arr
}
아래에서 눈여겨 볼 코드는 new Set 객체이다. 이 객체는 배열, 값 모두를 받을 수 있는데 신기한거는 중복된 값은 받지 않는다는 것이다. 이 객체를 활용하면 좀 더 쉽게 중복된 배열을 제거 할 수 있다.
function solution(numbers) {
const temp = []
for (let i = 0; i < numbers.length; i++) {
for (let j = i + 1; j < numbers.length; j++) {
//여기서 다르게 배열 형태로 값을 바로 저장하였다.
temp.push(numbers[i] + numbers[j])
}
}
//new Set은 중복된 value 를 가질 수 없는 set 객체이다.
// temp의 중복된 값을 담지 못한다는 것을 이용하여 적용시킨 듯 하다.
const answer = [...new Set(temp)]
//아래와 같은 식을 한번에 표현한 것이다..
// const answer = new Set(temp)
// let an = [...answer]
//중복되 값을 제거 하였으니 이제 정렬된 값을 곧바로 리턴하면 된다.ㅣ
return answer.sort((a, b) => a - b)
}