내일배움캠프 Node.js 본캠프 61일차

김선우·2024년 11월 5일
post-thumbnail

알고리즘 문제 풀어보기

행렬의 곱셈

문제 설명

2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.

제한 조건

행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.
곱할 수 있는 배열만 주어집니다.

입출력 예

arr1arr2return
#1[[1,4],[3,2],[4,1]][[3,3],[3,3]][[15, 15], [15, 15], [15, 15]]
#2[[2, 3, 2], [4, 2, 4], [3, 1, 4]][[5, 4, 3], [2, 4, 1], [3, 1, 1]][[22, 22, 11], [36, 28, 18], [29, 20, 14]]

풀이 코드

const solution = (arr1, arr2) => {
    const r1 = arr1.length;
    const c1 = arr1[0].length;
    const c2 = arr2[0].length;
    
    var answer = new Array(r1);
    for (let i=0; i<r1; i++) {
        answer[i] = new Array(c2);
    }
    
    for (i=0; i<r1; i++) {
        for (j=0; j<c2; j++) {
            value = 0;
            for (k=0; k<c1; k++) {
                value += arr1[i][k] * arr2[k][j];    
            }
            answer[i][j] = value;
        }
    }
    
    return answer;
}

풀이 과정

우선 행렬의 곱셈에 대해 먼저 이해를 할 필요가 있었다.
행렬의 곱셈에서 이해를 해봤다.
해당 글에 따라 입출력 예를 풀어보면


위 사진과 같은 과정을 통해 정답이 산출된다.
풀이 코드의 r1은 arr1의 행 개수, c1은 arr1의 열 개수(이는 arr2의 행 개수와 같다.), c2는 arr2의 열 개수로 지정해주고, 이후 삼중 반복문을 돌려주고 k반복문에서 나온 값들을 기반으로 value에 집어넣고, 이 value값을 answer배열에 넣어주면 된다.

처음에 입출력예만 보고 이해해보려다가 시간을 좀 쓰고 다른 블로그의 글을 통해서 행렬의 곱셈 자체를 이해한 후 문제를 풀 수 있었다.

0개의 댓글