코플릿/재귀

15_flattenArr

테오구 2021. 10. 31. 09:07
728x90

문제

다차원 배열을 입력받아 1차원 배열로 변환하여 리턴해야 합니다.

입력

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

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

 

 

 

function flattenArr(arr) {
  // TODO: 여기에 코드를 작성합니다.

  const result = [];
    for (let i = 0; i < arr.length; i++) {
      if (Array.isArray(arr[i])) {	 // 요소가 배열이라면
      const press = flattenArr(arr[i]); // 요소를 재귀한 결과를 변수에 담는다.
      result.push(...press);          // 변수에 담긴 배열을 배열에 푸쉬한다.
      }
      else {
        result.push(arr[i]);	   	// 배열이 아니라면 그 요소를 배열에 푸쉬한다.
      }
    }
  return result;
}

 

 

reference

function flattenArr(arr) {
  // base case
  if (arr.length === 0) {
    return [];
  }

  // recursive case
  const head = arr[0];
  const tail = arr.slice(1);
  if (Array.isArray(head)) {
    return flattenArr([...head, ...tail]);
  } else {
    return [head].concat(flattenArr(tail));
  }
}
728x90

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

11_or  (0) 2021.10.31
12_reverseArr  (0) 2021.10.31
13_findMatryoshka  (0) 2021.10.31
14_unpackGiftbox  (0) 2021.10.31
10_and  (0) 2021.10.30