행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.
행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않습니다.
arr1 | arr2 | return |
---|---|---|
[[1,2],[2,3]] | [[3,4],[5,6]] | [[4,6],[7,9]] |
[[1],[2]] | [[3],[4]] | [[4],[6]] |
function solution(arr1, arr2) {
var answer = [];
for (var i=0; i<arr1.length; i++){
answer[i] =[];
for(var j=0; j<arr1[i].length; j++){
answer[i].push(arr1[i][j] + arr2[i][j]);
}
}
return answer;
}
쉬워 보이는 문제인데 생각보다 한참 헤맸다. 나는 arr1[i][j]
의 값을 변수에 각각 담아서 그 변수를 배열에 넣어주려고 했다. 각자 뽑긴 했는데, 이 값들을 어떻게 안쪽 배열에 넣어주는지에 대해 고민을 한참 했다.
arr1의 빈 배열 안쪽에 arr[i] = []
으로 빈 배열을 정의해준 다음, push를 써 주면 되는 간단한 문제였다.
[[]]
이런 식을 정의해 주는 것을 이차원 배열, 또는 다중 배열이라고 한다.
const arr1 = [[1,2],[3,4]]
return arr1[0][1]
//2
이런 식으로 배열 첫 번째 인덱스의 2번째 값에 접근할 수 있다.
function sumMatrix(A,B){
return A.map((a,i) => a.map((b, j) => b + B[i][j]));
}
map을 사용하면 간결할 듯 해서 map을 쓰는 방법을 한참 고민했었다. 하지만 이중으로 쓰려고 하니 어떤 식으로 쓰이는 지 알 수 없어서 사용하지 못했다. 이런 식으로 사용하면 된다고 한다. 화살표 함수를 콜백함수로 쓴다면 화살표를 두 번 만들어 주면 된다.