재귀 함수로 다차원 배열을 1차원 배열로 변환

shleecloud·2021년 8월 24일
0

Algorithm

목록 보기
2/16

조금 해맸던 문제라서 기록한다. 네비게이터 역할로 잘 풀었던 문제인데 직접 코딩하려니 머리가 멍해지는 경험을 했다. 조건에 걸릴 경우 Recursive Case 구상에서 햇갈렸던 것으로 보인다.

  • 배열을 head와 tail로 나눈다.
  • head에서 조건을 확인한다. 조건에 걸리는 경우 조건을 해제해서 다시 처음부터 실행시킨다.
    if (Array.isArray(head)) return flattenArr(head.concat(tail))
  • head에서 조건에 걸리지 않는다면 head는 남겨두고 나머지 tail로 다시 재귀 함수를 호출한다.
    return [head].concat(flattenArr(tail))
// 다차원 배열을 입력받아 1차원 배열로 변환하여 리턴해야 합니다.
function flattenArr(arr) {
  // TODO: 여기에 코드를 작성합니다.
  if (arr.length === 0) return [];
  // if (arr.length === 1) return arr[0];
  
  let head = arr[0]
  let tail = arr.length === 1 ? [] : arr.slice(1)
  
  if (Array.isArray(head)) {
    return flattenArr(head.concat(tail))
  }
  else {
    return [head].concat(flattenArr(tail))
  }
}

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]
profile
블로그 옮겼습니다. https://shlee.cloud

0개의 댓글