아무 원소도 들어있지 않은 빈 배열 X가 있다. 양의 정수 배열 arr
가 매개변수로 주어질 때, arr
의 앞에서부터 차례대로 원소를 보면서 원소가 a라면 X의 맨 뒤에 a를 a번 추가하는 일을 반복한 뒤의 배열 X를 return
하는 solution
함수를 작성하는 문제이다.
const solution = (arr) => {
let answer = [];
for(let i = 0; i < arr.length; i++){
let num = arr[i];
for(let j = 0; j < num; j++){
answer.push(num);
}
}
return answer;
}
const solution = (arr) => arr.reduce((answer, num) => answer.concat(Array(num).fill(num)), []);
reduce
와 concat
을 사용하여 배열의 각 요소를 반복하여 새로운 배열을 만들고, 이를 누적하여 하나의 배열로 결합하는 코드이다.arr.reduce((answer, num) => answer.concat(Array(num).fill(num)), [])
reduce
메서드는 배열의 각 요소에 대해 주어진 리듀서 함수를 실행하고, 하나의 결과값을 반환한다.reduce
는 누적값을 처리하는 콜백함수와 초기값(빈 배열 []
)을 인자로 받는다.answer
와 현재 배열 요소 num
을 인자로 받는다.num
을 사용하여 새로운 배열을 만들고 이를 누적값 answer
에 연결한다.Array(num).fill(num);
// num이 3이라면 [3, 3, 3] 이라는 배열을 생성
fill
메서드는 배열의 모든 요소를 정적인 값으로 채운다.Array(num)
은 길이가 num
인 새 배열을 생성한다..fill(num)
은 이 배열의 모든 요소를 num
값으로 채운다.answer.concat(Array(num).fill(num));
concat
메서드는 기존 배열에 다른 배열이나 값들을 연결하여 새 배열을 반환한다.concat
은 누적값 answer
배열과 fill
메서드를 사용해 생성된 새 배열을 연결한다.num
값을 num
번 포함하는 배열이 answer
에 추가되어 각 요소를 그 값만큼 반복하는 최종 배열을 형성한다.