알고리즘 - freeCodeCamp - Streamroller

NO PAIN, NO GAIN·2019년 12월 10일
0

algorithm

목록 보기
14/18

문제

중첩된 배열을 없애고 하나의 배열로 반환하시오.

예시

steamrollArray([[["a"]], [["b"]]]) --> ["a", "b"]
steamrollArray([1, [2], [3, [[4]]]]) --> [1, 2, 3, 4]
steamrollArray([1, [], [3, [[4]]]]) --> [1, 3, 4]
steamrollArray([1, {}, [3, [[4]]]]) --> [1, {}, 3, 4]

풀이

function steamrollArray(arr) {
  // I'm a steamroller, baby
  let pureArr = [];
  for (let i = 0; i < arr.length; i++){
    recursionFunc(arr[i], pureArr);
  }
  return pureArr;
}

function recursionFunc (val, arr = []) {
  if (!Array.isArray(val)) {
    arr.push(val);
  } else if (Array.isArray(val) && val.length === 1){
    recursionFunc(...val, arr);
  } else if (Array.isArray(val) && val.length > 1){
    for (let i = 0; i < val.length; i++){
      recursionFunc(val[i], arr)
    }
  }
  return;
}

steamrollArray([1, [2], [3, [[4]]]]);

재귀함수를 작성했다.
매개변수로 valarr인데 arr은 기본 배열을 가지고 있는 매개변수다. 조건문의 내용은 val이 배열이 아니었을 때 배열 안에 값을 담는다. val이 배열이고 길이가 1 이면 다시 recursionFunc를 실행시킨다. 그렇지 않고 중첩된 배열에서 2 이상의 길이를 가지고 있는 배열이라고 한다면 중첩된 배열 안에서도 또 중첩된 배열이 있으면 그 값도 조회해야 한다. 그러므로 반복문을 이용하고 recursionFunc를 다시 실행한다. 매개변수 arr은 계속 가지고 다닌다.

profile
갈고 닦자.

0개의 댓글