재귀함수를 풀면서 가장 인상깊었던 문제를 공유하려고 한다.
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]);
}
}
}
'알고리즘 & 자료구조' 카테고리의 다른 글
[node.js] 수 이어 쓰기 1(백준 1748번) (0) | 2023.07.19 |
---|---|
재귀함수(capitalizeFirst) (0) | 2023.06.22 |