본문 바로가기

■ 프로그래밍/프로그래머스

[자바스크립트/Lv1] 행렬의 덧셈

https://programmers.co.kr/learn/courses/30/lessons/12950

 

[문제]

더보기

문제 설명

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

 

[풀이]

2020.03.17

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

해당 문제에서 원하는 답의 형식은 아래와 같다.

answer[0][0] = arr1[0][0] + arr2[0][0];
answer[0][1] = arr1[0][1] + arr2[0][1];

answer[1][0] = arr1[1][0] + arr2[1][0];
answer[1][1] = arr1[1][1] + arr2[1][1];

따라서 맨 처음 빈 배열의 answer를 생성한 후, for문으로 answer[i]를 반복하여 배열 안의 배열을 선택하고, 해당 for문 안에 [j]으로 배열 안의 element를 선택한다. 

 

만약 answer가 answer[1][1]까지 존재한다면, for문은 아래와 같이 나온다.

// var arr1 = [[1, 2], [3, 4]];
// var arr2 = [[2, 4], [6, 8]];
// arr1, arr2를 위와 같다고 가정하고 solution(arr1, arr2)를 돌렸을 경우,

function solution(arr1, arr2) {
    var answer = Array();
    
    for (var i = 0; i < arr1.length; i++) {
        answer[i] = [];
        // answer[0] = [];
        // answer[1] = [];
        
        for ( var j = 0; j < arr1[0].length; j++) {
        	// j는 arr1[0].length, 즉 2이다
            answer[i][j] = arr1[i][j] + arr2[i][j];
            
		// answer[0][0] = arr1[0][0] + arr2[0][0]; // answer[0][0] = 1 + 2 = 3
		// answer[0][1] = arr1[0][1] + arr2[0][1]; // answer[0][1] = 2 + 4 = 6
		// answer[1][0] = arr1[1][0] + arr2[1][0]; // answer[1][0] = 3 + 6 = 9
		// answer[1][1] = arr1[1][1] + arr2[1][1]; // answer[1][1] = 4 + 8 = 12
        }
        // console.log(answer);
        // answer = [[3, 6], [9, 12]];
    }
    return answer;
}

solution(arr1, arr2); 
// output: 
// [Array(2)]
// 0: (2) [3, 6]
// 1: (2) [9, 12]