코딩테스트

[JS] 연습문제 > 행렬의 덧셈

차차한 2022. 8. 24. 09:17

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

            arr.push(arr1[i][j] + arr2[i][j]);            
        }
        answer.push(arr);
        arr = [];
    } 
    return answer;
}

원래도 이차원배열을 어려워했는데 JS에서 이차원배열은 더 어려웠다.

[[4,6],[7,9]]처럼 나와야하는데 계속 [[4,6,7,9]]이렇게 들어가지고..;;

JAVA에서 했던 것과는 다르게 접근을 했어야 했다.

먼저 arr 배열에 두 값을 더한 값을 넣고, 그것을 answer배열에 넣어 이차원배열을 만든다.

이때 주의해야 할 것이 arr을 다시 비워줘야 한다는 것!

비워주지 않으면 [[4,6,7,9],[4,6,7,9]] 이렇게 들어가진다. 

한 배열을 푸쉬하고 또다른 배열을 푸쉬해줘야해서 그렇다.

연습문제였는데도 꽤 많이 헤맨 문제.. 다음에 다시 풀어봐야겠다.

 

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

다른 사람 풀이1.

map을 사용한 방법이다.

나도 처음에는 map으로 문제를 풀어보고 싶었는데 잘 안 됐었다..

arr1이 [[1,2],[2,3]]일 때 첫 a는 [1,2](arr1[0])가 된다. 이 a 배열을 다시 map으로 반복하면 b는 1(arr[0][0])과 2(arr[0][1])가 되고, arr2의 [i][j]인덱스부터 반복해서 더해주면 된다.

풀이를 보니 쉬워보이는 문제...

 

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;
}

다른 사람 풀이2.

이분은 answer를 처음부터 이차원배열로 선언을 하고 arr[i]을 비워준 후 그 값에 인덱스를 더한 값을 넣어줬다.

안에 들어가는 배열의 값을 비워주는게 이 문제의 포인트였다!