본문 바로가기

나를 성장시키는 알고리즘

이중배열 간단하게 풀기

sumOfArraysInArray

문제


2차원 배열(배열을 요소로 갖는 배열)을 입력받아 모든 수(number)의 합을 리턴해야 합니다.

입력


인자 1 : arr

  • 배열을 요소로 갖는 배열
  • arr[i]는 임의의 타입을 요소로 갖는 배열

출력


  • number 타입을 리턴해야 합니다.

주의 사항


  • 합을 구할 때 number 타입만 고려해야 합니다.

입출력 예시

let output = sumOfArraysInArray([ [1, 2], [undefined, 4, '5'], [9, 'hello'], ]); console.log(output); // --> 16

 

풀이


1. 1차원 배열을 요소로 갖는 2차원 배열이라는 것을 인지. 1차원 배열의 요소를 한 곳에 몰아넣는 작업을 하면 요소만 추출

 

2. 한 곳에 몰아 넣고 'number'인 부분만 filter해서 배열 추출

 

3. 마지막 그 요소들을 더하면 끝!!

 

코드


const joinedArr = arr.reduce(function (acc, cur) {
    return acc.concat(cur);
  });

  const onlyNumbers = joinedArr.filter(function (el) {
    return typeof el === 'number';
  });

  return onlyNumbers.reduce(function (acc, cur) {
    return acc + cur;
  }, 0);

내가 쓴 코드


1. 이중 배열의 요소인 배열로 map을 통해 접근

2. 배열인 요소를 반복했을 때 요소의 타입이 넘버이면 새로운 변수에 그 데이터를 저장

3.  맵을 리턴하면 정리된 새로운 배열 추출

4. 그 배열을 reduce로 정리하면 끝!!

 

 

let newarray=arr.map(array=>{

let sum=0

 

//만약에 타입이 숫자면 더한다.

for(let i=0; i<array.length;i++){

if( typeof array[i] === 'number'){

sum= sum+array[i]

}

}

 

return sum

})



return newarray.reduce((acc,cur)=>{

 

return acc+cur

 

},0)