📚

Flatten Deep

Flatten Deep - Explanation

어려움 배열 O(n) O(n)

Problem Summary

Write a function that flattens a nested array to any depth.

Go to Problem →

Detailed Explanation

이 문제는 **재귀와 Array.isArray**를 사용하여 중첩 배열을 완전히 평탄화하는 방법을 학습합니다. ## 핵심 개념: 깊은 평탄화 모든 중첩 수준을 재귀적으로 평탄화합니다. ### 구현 ```javascript function flattenDeep(arr) { return arr.reduce((flat, item) => flat.concat(Array.isArray(item) ? flattenDeep(item) : item), []); } ``` ### 동작 원리 1. 각 요소가 배열인지 확인 2. 배열이면 재귀 호출 3. 아니면 그대로 추가 ### 실행 예시 ```javascript [1, [2, [3, [4]]]] → [1, ...flattenDeep([2, [3, [4]]])] → [1, 2, ...flattenDeep([3, [4]])] → [1, 2, 3, ...flattenDeep([4])] → [1, 2, 3, 4] ``` ### 대안: flat(Infinity) ```javascript arr.flat(Infinity) ``` ES2019 이상에서 사용 가능합니다. ### 스택 오버플로우 주의 매우 깊은 중첩에서는 스택 오버플로우가 발생할 수 있습니다.

Solution Code

solution.js
function flattenDeep(arr) {
  return arr.reduce((flat, item) =>
    flat.concat(Array.isArray(item) ? flattenDeep(item) : item), []);
}

Key Concepts from This Problem

1. 재귀
2. Array.isArray
3. 깊은 평탄화
4. reduce

Common Mistakes

Array.isArray로 배열 여부를 확인해야 합니다 (typeof는 object 반환)
매우 깊은 중첩에서 스택 오버플로우가 발생할 수 있습니다
flat(Infinity)가 있지만 직접 구현해보는 것이 학습에 도움됩니다

Hints

Hint 1: 재귀를 사용하세요.
Hint 2: Array.isArray로 배열인지 확인하세요.

Complexity Analysis

Time Complexity

O(n)

Grows linearly with input size

Space Complexity

O(n)

Uses memory proportional to input size

Related Tags

#배열 #재귀 #평탄화