-
오늘은 알고리즘 문제를 풀었다.
오늘 어려웠던 문제
function solution(arr1, arr2) { const Arr1 = arr1.flat() const Arr2 = arr2.flat() let sum = [] for (let i = 0; i < Arr1.length; i++) { sum.push(Arr1[i] + Arr2[i]) } let result = [] while (true) { result.push(sum.splice(0, arr1[0].length)) if (sum.length === 0) { break } } return result } console.log(solution([[1, 2], [2, 3]], [[3, 4], [5, 6]]))
중첩반복문을 활용하는걸 몰라서 한참을 방황했다.
[[],[]] 사람 눈인것같기도...
풀려고 했던 방식은 arr1 과 arr2를 각각 중첩배열이 아닌 하나의 배열로 만들고
for문을 돌면서 arr1[0]+arr2[0]을 구하는 방식으로 하려고 계획을 했다.
처음에 중첩 반복문을 이용해보려고 .join을 사용해서 하려했더니 1,22,3 이런식으로 결과가 나와서 2가 붙어버려서 다시 배열로 펼칠 수 가 없었다.
해결방법
구글링으로 중첩반복문을 합치는 방법에 대해 검색을 했고 .flat()이라는 메서드에 대해 알게되었고 flat()을 이용해서 해결을 했다.
mdn에 나와있는 내용으로는 flat() 메서드는 모든 하위 배열 요소를 지정한 깊이까지 재귀적으로 이어붙인 새로운 배열을 생성한다고 한다.
참고한 내용은 아래 링크이다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/flat
블로그를 쓰다가 join()으로 했을때 어떻게 나왔었는지 다시 확인 하던중.. join()을 썼다가 전개연산자로 다시 배열로 만들면
[ '1', ',', '2', '2', ',', '3' ]
이렇게 나온다.. 아까는 분명 안나왔는데 그래서 아래 코드로 만드니까 flat()를 사용하지 않아도 동일하게 작동했다..
그다음에 난관이 다시 배열안에 이전에 arr1처럼 들어가야 하기때문에 while문을 돌려서 빈배열에 푸쉬를 해줬는데
let result = [] while (true) { result.push(sum.splice(0, arr1[0].length)) if (sum.length === 0) { break } }
여기서 splice에 두번째 인자로 뭐가 들어와야할지 알긴 알겠는데 어떻게 코드로 넣어야할지 한참을 헤매다가 찾으려는 arr1의 0번째 인덱스의 개수를 구하면 되는걸 알게되었다.
이번문제는 정말 나에게 도움이 많이 되는 문제였고 메서드를 써주면 더 간략하게 코드를 구현할 수 있지만 내가 메서드를 쓰지 않아도 풀수 있다는걸 알게 되었다.