
2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.
행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.
곱할 수 있는 배열만 주어집니다.
| arr1 | arr2 | return | |
|---|---|---|---|
| #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배열에 넣어주면 된다.
처음에 입출력예만 보고 이해해보려다가 시간을 좀 쓰고 다른 블로그의 글을 통해서 행렬의 곱셈 자체를 이해한 후 문제를 풀 수 있었다.