찰리의 이야기

Javascript 행렬의 덧셈 본문

찰리: 코딩 연습

Javascript 행렬의 덧셈

쨜리 2021. 9. 1. 14:02
반응형

Javascript 행렬의 덧셈

 

 

문제 :

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

먼저 배열의 값들을 연산을 통해 새로운 배열로 반환한다는 점에서

map() 메서드을 이용할 수 있을 것이라는 생각이 들었다.

 

하지만, 1차원적인 방법으로 우선 풀어보았다.

배열속에 배열이 있다보니 배열 탐색을 하되 중첩 반복문을 이용해야 할 것 같다.

그리고 배열 안에 또다른 배열이 추가될지 여부도 판단하여, 

새롭게 할당한 다음 더한 값을 할당해줘야겠다.

 

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

처음엔 push() 메서드를 이용해서 값을 넣을까 생각했었는데,

행렬일 맞는 위치에 할당하다보니 직접 대입하는 방식을 사용했다.

 

처음 주어진 answer = [] 은 원래 주어진 내부 []을 삭제하긴 했는데 

큰 의미는 없다. 있어도 되고 없어도 된다. 어짜피 같은 값을 할당하기 때문이다.

 

여기까지가 나의 풀이고

다른 풀이도 참고해보았다.

 

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

이 풀이법이 제일 간단해 보였는데,

map 매서드를 중첩해서 풀어내었다.

중첩 반복문이 있듯이,

map도 중첩으로 이용할 수 있다는 것을 이해할 수 있었다.

첫번째 배열에 map을 걸어주면서 i 인덱스를 만들어주고,

다시금 내부 배열에 대해 map을 걸어주면서 j 인덱스를 만들어준다.

그리고 그 내부의 currentValue 요소와 B배열의 i행j열 요소를 더해주는 배열을 리턴하는 것이다.

특정 빈배열을 별도로 할당해주지 않아도 

알아서 배열을 구성하는 이유는

애시당초 문제에서 행열이 같은 크기의 두 배열을 다루었기 때문인 것 같다.

배열의 중첩 반복문을 이용할땐,

map을 중첩으로 이용해서 풀어보자!

 

 

 

Javascript 행렬의 덧셈

반응형
Comments