[Lv.0] 배열의 원소만큼 추가하기

woodstock·2024년 1월 5일
0

코딩테스트

목록 보기
26/56
post-thumbnail

배열의 원소만큼 추가하기

문제설명

아무 원소도 들어있지 않은 빈 배열 X가 있다. 양의 정수 배열 arr가 매개변수로 주어질 때, arr의 앞에서부터 차례대로 원소를 보면서 원소가 a라면 X의 맨 뒤에 a를 a번 추가하는 일을 반복한 뒤의 배열 X를 return 하는 solution 함수를 작성하는 문제이다.

배열 메서드의 활용

풀이

풀이 1.

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;
}

풀이 2.

const solution = (arr) => arr.reduce((answer, num) => answer.concat(Array(num).fill(num)), []);
  • reduceconcat을 사용하여 배열의 각 요소를 반복하여 새로운 배열을 만들고, 이를 누적하여 하나의 배열로 결합하는 코드이다.

풀이해설

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에 추가되어 각 요소를 그 값만큼 반복하는 최종 배열을 형성한다.
profile
해내는 사람

0개의 댓글