본문 바로가기

알고리즘 & 자료구조

재귀함수 (flatten)

재귀함수를 풀면서 가장 인상깊었던 문제를 공유하려고 한다.

 

flatten

배열의 배열을 받아들이고 모든 값이 평평한 새 배열을 반환하는 문제이다.

 

입력 예시 

flatten([1, 2, 3, [4, 5] ])

flatten([1, [2, [3, 4], [[5]]]])

 flatten([[1],[2],[3]]) 

flatten([[[[1], [[[2]]], [[[[[[[3]]]]]]]]]])

출력 예시

[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
[1,2,3]
[1,2,3]

 

문제 접근 방식

입력 받은 Array에서 배열과 배열이 아닌 값을 구분지어야한다. 

Array.isArray()라는 메서드 안에 Array를 넣으면 해당 값이 Array인지 아닌지를 확인할 수 있다. 

만약 Array라고 판단이 되면, 해당 그 안에 다시 Array가 있는지 없는지 확인을 해야된다.

그렇기 때문에 재귀함수를 사용해서 그안에 값이 Array가 아닌값이 나올때까지 반복한다. 

이렇게 반복을 하면, 결론적으로는 값들만 남아서 array를 형성한다.

 

결과 코드 

 

function flatten(oldArr) {
  var newArr = [];
  for (var i = 0; i < oldArr.length; i++) {
    if (Array.isArray(oldArr[i])) { //해당값이 Array인지 확인
      newArr = newArr.concat(flatten(oldArr[i])); //배열값 안에 배열이 있는지 확인해야 되기때문에 // 재귀함수를 이용해서 반복 

    } else {
      newArr.push(oldArr[i]);
    }
  }
}

 

'알고리즘 & 자료구조' 카테고리의 다른 글