The journey to becoming a developer

My future is created by what I do today, not tomorrow.

Algorithms/Programmers

[프로그래머스 Level 1] 행렬의 덧셈 (자바스크립트)

Millie 2021. 10. 5. 21:30

Description

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

Constraints

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

My Solution

function solution(arr1, arr2) {
  let 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;
}

2차원 배열을 다루는 문제이고, 전통적인 이중 for문을 사용하였다. 

나는 임시 배열 temp를 만들어서 거기에 array 요소의 합을 push하고, 내부의 for문이 끝난 후에 answer에 temp를 push하는 식으로 로직을 짰다. 외부 for문이 시작될 때 temp는 다시 빈 배열로 선언된다. 

Other's Solution

function solution(arr1, arr2) {
    var answer = [[]];
    for(let i = 0; i < arr1.length; i++) {
        answer[i] = [];
        for(let j = 0; j < arr1[0].length; j++) {
            answer[i][j] = arr1[i][j] + arr2[i][j];
        }
    }
    return answer;
}

내가 한 방식과 비슷하지만 차이는 push 메서드를 쓰지 않았다는 것이다.

대신에 인덱스에 값을 대입하는 식으로 구현하였다. 

function sumMatrix(A,B){
    return A.map((a,i) => a.map((b, j) => b + B[i][j]));
}

map을 이용해서 2차원 배열을 짧은 코드로도 다룰 수 있다.

map에 화살표 함수를 전달할 때, 화살표 함수의 인자를 잘 기억하고 활용해야겠다.