[프로그래머스] 행렬의 덧셈 _JavaScript

ne_ol·2022년 1월 15일
0
post-thumbnail

문제 설명

행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 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]]

기본 solution 코드

function solution(phone_number) {
    var answer = '';
    return answer;
}

문제 풀이

function solution(arr1, arr2) {
    for (let i = 0; i < arr1.length; i++) { 
    //예시 1번의 arr1의 길이(2)만큼 반복하게 되면, arr1[0] = [1, 2], arr1[1] = [2,3]
        for (let j = 0; j < arr1[i].length; j++)
        //위 arr1[i] 길이(2)만큼 반복하게 되면, arr1[0][0] = 1, arr1[0][1] = 2, arr1[1][0] = 2, arr1[1][1] = 3 이렇게 총 4개의 값이 나온다.
            arr1[i][j] += arr2[i][j];
     	    //4개의 값에 arr1과 같은 길이를 가지고 있는 arr2[i][j]를 더해준다.
            }
    return arr1;
}

풀이 설명

답 보고 풀었다. 두 번째 for 문에서 왜 j < arr1.length 가 아니라 j < arr1[i].length 인지 헷갈렸다. 이것은 두 번째 예시를 적용하여 알 수 있었다. 첫 번째 예시 같은 경우는 arr1의 length 와 arr1[i]의 length 가 같지만, 두 번째는 그렇지 않다. 따라서 arr1 안에 있는 값(배열) 내부에 있는 값들의 개수가 arr1 안에 있는 값(배열)의 개수와 다를 수 있기 때문에 j < arr1[i].length 인 것이다.
또한 arr1[0][0] + arr2[0][0] = 4 인데, 이것을 return arr1 했을 때 바로 기존 arr1 배열 틀 안으로 들어가는 것이 신기했다.

사용 함수

undefined

다른 풀이

function solution(arr1, arr2) {
    return arr1.map((a,i) => a.map((b, j) => b + arr2[i][j]));
}

다른 풀이 설명

  1. 사용된 함수
  • .map(): 배열 내의 모든 요소 각각에 대하여 주어진 함수를 호출한 결과를 모아 새로운 배열을 반환
    • arr.map(callback(currentValue[, index[, array]])[, thisArg])

(출처: https://developer.mozilla.org/ko/)

  1. 풀이
  • arr1에 map을 걸면서 현재 요소 (a= [1,2],[2,3]) 에 인덱스 (i= 0, 1) 를 만들어주고, arr1 내부 배열 (a)에 map을 다시 걸면서 a의 현재 요소 (b= a[0]= 1, 2 & a[1]= 3, 4) 에 인덱스 (j=0, 1) 를 만들어주었다. 그리고 이 b에 arr2[i= 0, 1][j=0, 1]를 더해주는 배열을 리턴했다. 두 array의 length가 같기 때문에 특정 빈배열을 별도로 할당하지 않아도 되는 것 같다.
  1. 나의 설명이 맞는지 모르겠지만 나는 저렇게 이해했다. 사실 100% 이해하지 못했다.
profile
개발되는 중입니다.

0개의 댓글