본문 바로가기

나를 성장시키는 알고리즘

다차원 배열을 계속 접근하여 새로운 배열을 추출

문제 :중첩 배열에 접근하여 새로운 배열 추출


주의사항


  • 함수 flattenArr는 재귀함수의 형태로 작성합니다.
  • Array Method flat()과 flatMap() 사용은 금지됩니다.
  • 반복문(for, while) 사용이 가능합니다.
  • 입력받은 배열은 함수의 호출 뒤에도 처음 상태를 유지해야 합니다(immutability).
  • 입력으로 전달되는 다차원 배열이 중첩된 정도(중첩의 깊이)는 정해져 있지 않습니다.
  • 빈 배열을 입력받은 경우, 빈 배열을 리턴해야 합니다.

입출력 예시

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) { //[1]
  // TODO: 여기에 코드를 작성합니다.
  let newarr=[]
  
  if(arr.length===0){
    return []
  }
  //1. 요소를 돌자.

  for(let i=0; i<arr.length; i++){
        //2. 만약 요소를 돌았는데 arr[i] 번째 요소가 배열이면 
        if(Array.isArray(arr[i])){
          //요소가 배열이기 때문에 함수를 다시 돈다(요소를 돈다).다시 배열이 있는지를 체크해서 배열이 아닌 요소들을 처리
          // [1] 에 접근 =>arr[0]은 배열이 아님.
          //여기서의 newarr은 마지막의 newarr이 아니기 때문에 이것을 다시 꺼내와서 새롭게 넣어줘야 함.
          const element=flattenArr(arr[i])
          newarr.push(...element)
          
        }else{

        //돌았는데 arr[i]가 배열이 아니면..새로운 배열에 push 한다.
         newarr.push(arr[i])

        }
  }
  //만약에 배열이면 들어가서 무엇인가 액션을 취해야 함.
  return newarr // newarr=[1]

}

 

 

 

조감도



반복해서 번째 요소에 접근 배열인지 아닌지 판단 함수의 종료




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

배열임(요소가 배열이 아닐때까지 요소에 접근)
[1] 를 arr로 치환하여 함수 재실행 arr[0]은 배열이 아님 newarr에 요소 push new arr 저장 return 으로 함수 종료 [1] 추출 새로운 elemente 저장 새로운 newarr에 요소 저장
If 배열 아니면 요소들을 돌아서 새로운 배열에 push()

배열이 아니므로 2도 푸시
newarr

[1,2] 완성