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 |