프로그래머스 | 행렬의 덧셈

imzzuu·2022년 4월 28일

행렬의 덧셈


문제 설명

행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.

제한 조건

  • 행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않습니다.

입출력 예

arr1arr2return
[[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]]
  1. 정답을 push 할 빈 배열을 선언 (new Array() 형태로도 가능)
  2. 두 배열의 길이는 같기 때문에 그냥 임의로 arr1 의 길이만큼 돌릴 for 문을 작성
  3. 이 때 이중 for문을 돌린 후, 중첩 배열을 만들어줄 빈 배열을 선언
  4. arr[i] 의 index를 담당할 다음 for 문을 작성 → arr[i]의 길이에 따라 돌아갈 j 의 수가 다르기 때문에 j<arr1[i].length 로 돌린다.
  5. 미리 만들어둔 arr 에 실행문의 결과를 push
  6. for문을 완료하면 answer 에 결과를 push 하고 return

어려웠던 점 및 느낀 점


이것 역시 두 달전에 못풀었던 문제다.
심지어 저 나열법을 했음에도 이중 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]));
}

0개의 댓글