코플릿/재귀

09_take

테오구 2021. 10. 31. 12:58
728x90

문제

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

입력

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: 여기에 코드를 작성합니다.

  if(num === 0){
    return []
  }
  if(num > arr.length){
    return arr
  }
  return arr.slice(0,1).concat(take(num-1, arr.slice(1)))
  // num =4, arr = [-1,-2,1,2,3,4,5]
  // num === 4 arr.slice(0,1) =[-1]  take(num-1, arr.slice(1)) === take(3, [-2, 1, 2, 3, 4, 5])
  // num === 3 arr.slice(0,1) =[-2] take(num-1, arr.slice(1)) === take(2, [1, 2, 3, 4, 5])
  // num === 2 arr.slice(0,1) =[1] take(num-1, arr.slice(1)) === take(1, [2, 3, 4, 5])
  // num === 1 arr.slice(0,1) =[2] take(num-1, arr.slice(1)) === take(0, [3, 4, 5])
  // num === 0 []
  // arr.slice를 다 더해줍니다.
}

 

 

 

 

function take(num, arr) {
  // if (num >= arr.length) {
  //   return arr;
  // }

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

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

  return [head].concat(take(num - 1, tail));
}
728x90

'코플릿 > 재귀' 카테고리의 다른 글

07_arrLength  (0) 2021.11.04
08_drop  (0) 2021.10.31
11_or  (0) 2021.10.31
12_reverseArr  (0) 2021.10.31
13_findMatryoshka  (0) 2021.10.31