다차원 배열을 입력받아 1차원 배열로 변환하여 리턴해야 합니다.
function flattenArr(arr) {
// TODO: 여기에 코드를 작성합니다.
/**
* 1.재귀 함수의 입력값과 출력값 정의하기
* - flatternArr : [num or []] => []
* 2.문제를 쪼개고 경우의 수를 나누기
* - 더 이상 쪼갤 수 없는 경우 : 빈 배열을 입력받은 경우 -> 빈 배열 리턴
* - 그렇지 않은 경우 :
* 3.단순한 문제 해결하기 (base case)
* - [[], ?, [], [[]], []]
* 4.복잡한 문제 해결하기
* 5.코드 구현하기
*
*
* 주어진 문제가 (구조는 비슷하고) 더 작은 문제로 나뉘어 질 수 있는 경우
중첩된 루프가 많거나 중첩의 정도(number of loops)를 미리 알 수 없는 경우
배열이 아닌 숫자를 만났을 경우 -> result.push(arr[i])
*/
if (arr.length === 0) {
return [];
}
let result = [];
for (let i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
let a = flattenArr(arr[i]); //[1]
result.push(...a);
} else {
result.push(arr[i]);
}
}
return result;
}
if (Array.isArray(arr[i])) {
let a = flattenArr(arr[i]); //[1]
result.concat(a);
} else {
result.push(arr[i]);
}
처음에 작성한 코드는 위와 같았다. 재귀 호출을 통해 얻은 배열을 기존 result
배열과 concat()
으로 합쳐줄 생각이었다. 하지만 위와 같이 작성하면 다차원 배열안에 있는 수를 읽어오지 못했고 현재 질문을 올려둔 상태다. 이후 답변을 통해 오류를 찾고 추가적으로 적겠다.