문제 설명
행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.
제한 조건
입출력 예
| 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) {
let answer = []
for(let i = 0; i<arr1.length; i++){
let arr = []
for(let j = 0; j<arr1[i].length; j++){
arr.push(arr1[i][j]+arr2[i][j])
}
answer.push(arr)
}
return answer
}
단순히 나열하면 아래와 같은 방식으로 진행해야한다.
인덱스는 length 만큼 정해지기때문에 이를 토대로 이중 for 문을 돌려야할 것 같고 생각했다.
[arr1[0][0]+arr2[0][0],arr1[0][1]+arr2[0][1]],
[arr1[1][0]+arr2[1][0],arr1[1][1]+arr2[1][1]]
new Array() 형태로도 가능)j<arr1[i].length 로 돌린다. 어려웠던 점 및 느낀 점
이것 역시 두 달전에 못풀었던 문제다.
심지어 저 나열법을 했음에도 이중 for문을 작성 못했었다....
그래서 map으로 시도하다가 포기했던 문제인데, 공부 초반이라 진짜 이해가 부족했던 것 같다.
일단 나열하고 나니까 for문은 금방 작성했는데, 중첩 for문을 구현하는데 조금 시간을 썼다.
i 번째 사이클이 (첫 번째 for문) 돌았을 때, 괄호가 생겨야 하기때문에 한 사이클이 돌면
미리 만들어 놓은 배열에 push 하고 그 것을 마지막 정답 배열에 push 하는 방식으로 작성했다!
비록 넘나 평이한 코드로 1점 밖에 못 받았지만, 점점 푸는 시간이 줄어들고있는 것 같아서 뿌듯하다!
다른 분들의 코드를 보니 map 도 사용한 것 같았는데 이 부분도 시간이 나면 분석해봐야겠다.
빈 배열 만들지 않고, answer[i] = []
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;
map
function sumMatrix(A,B){
return A.map((a,i) => a.map((b, j) => b + B[i][j]));
}