문제는 링크 참고 -> 행렬의 덧셈
function solution(arr1, arr2) {
var answer = [];
for (let i = 0; i < arr1.length; i++) {
let temp = [];
for (let j = 0; j < arr1[i].length; j++) {
temp.push(arr1[i][j] + arr2[i][j]);
}
answer.push(temp);
}
return answer;
}
j포문을 돌기전에 i포문에서 temp라는 배열을 만들어서 합한 값을 temp.push 했다.
조금 원시적인 방법 & 빅오를 배우고 나니까 포문 중첩을 고치고 싶어졌다.
다른 사람의 풀이를 참고하여 두 번째 풀이를 진행했다.
function solution(arr1, arr2) {
let answer = arr1.map((val, idx) => {
return arr1[idx].map((val2, idx2) => val2 + arr2[idx][idx2]);
});
return answer;
}
map이라는 메서드는 콜백함수를 실행하여 새로운 배열을 반환한다.
먼저 화살표 함수로 return 없이 () => 뫄뫄 이렇게 적어도 되고, () => {return 뫄뫄} 이런식으로 중괄호를 사용하면 return을 적어주면 된다.
핵심은 arr1을 map을 돌면서 가장 바깥 배열을 돌고 그 다음 map을 또 써서 2중 배열까지 돌게 한다.
그런데 첫 번재 map 사용시 val라는 말이 정확히는 arr1 (= [[2,3],[1,4]])의 각각의 요소인 [2,3] 과 [1,4]를 말하는 것이니, 헷갈리지 않게 arr라고 바꿔도 될 것 같다.
function solution(arr1, arr2) {
let answer = arr1.map((arr, idx) => {
return arr.map((val, idx2) => val + arr2[idx][idx2]);
});
return answer;
}
기존 코드의 arr1[idx]가 결국은 arr1을 맵으로 돌려서 받는 arr 요소이기때문에 arr1[idx] => arr로 수정해줬다.