09_take

TK·2022년 6월 27일

[코플릿] 재귀

목록 보기
9/9

💬 문제

수(num)와 배열을 입력받아 차례대로 num개의 요소만 포함된 새로운 배열을 리턴해야 합니다.

📁 입력

  • 인자 1 : num
    number 타입의 정수 (num >= 0)
  • 인자 2 : arr
    임의의 요소를 갖는 배열

📂 출력

  • 순차적으로 num 개의 요소로 구성된 배열을 리턴해야 합니다.

주의 사항

  • 함수 take는 재귀함수의 형태로 작성합니다.
  • 반복문(for, while) 사용은 금지됩니다.
  • 입력받은 배열은 함수의 호출 뒤에도 처음 상태를 유지해야 합니다(immutability).

📺 입출력 예시

let output = take(2, [1, -2, 1, 3]);
console.log(output); // --> [1, -2]

output = take(5, [1, -2, 1, 3]);
console.log(output); // --> [1, -2, 1, 3]

내가 푼 오답

function take(num, arr) {
// TODO: 여기에 코드를 작성합니다.
let newArr =[];

if(num>arr.length){
  return arr;
}
if (num===0){
  return newArr;
}
else{
  const n= n+1;
  return take(num-1, newArr.push(arr[n]))
}
}

정답 및 나만의 해석

function take(num, arr) {               // take(2, [1, -2, 1, 3]); 라면
  // if (num >= arr.length) {
  //   return arr;
  // }

  if (num === 0 || arr.length === 0) {
    return [];
  }

  // const [head, ...tail] = arr;
  const head = arr[0];                  // head = arr[0]= 1
  const tail = arr.slice(1);            // tail = arr.slice(1) = [-2, 1, 3]

  return [head].concat(take(num - 1, tail));  // [1].concat(take(2-1, [-2, 1, 3]))
}                                                      // take(1, [-2, 1, 3]);
                                                       // head = arr[0] = -2;
                                                       // tail = [1, 3]
                                                          // [-2].concat(take(1-1, [1,3]))

📝 한줄평

concat의 사용법

profile
쉬운게 좋은 FE개발자😺

0개의 댓글