2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.
제한 조건
입출력 예
arr1 | arr2 | return |
[[1, 4], [3, 2], [4, 1]] | [[3, 3], [3, 3]] | [[15, 15], [15, 15], [15, 15]] |
[[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]] |
function solution(arr1, arr2) { var answer = []; let arr1Index = 0; let arr2Index = 0; let mulIndex = 0; let sum = 0; const mulIndexlength = arr1[0].length; while(true) { sum += (arr1[arr1Index][mulIndex] * arr2[mulIndex][arr2Index]); mulIndex++; if(mulIndex >= mulIndexlength) { if(!arr2Index) { answer.push([sum]); } else { answer[arr1Index].push(sum); } mulIndex = 0; sum = 0; arr2Index++; } if(arr2Index >= arr2[0].length) { arr2Index = 0; arr1Index++; } if(arr1Index >= arr1.length) { break; } } return answer; }
기본적으로 행렬의 곱을 하는 방법을 알아야 함.
왼쪽 행렬 열의 수와 오른쪽 행렬 행의 수가 같아야 함.예를 들면
[2 X 3] [3 X 2] => [2 X 2]
[3 X 3] [3 X 3] => [3 X 3]
결과 값의 행과 열의 수는 왼쪽 행렬 행의 수, 오른쪽 행렬 열의 수가 나옴.
그래서 실제로 하는 방법은 아래와 같음
1 2
3 4
5 6
7 8
위 두 행렬의 곱은
{(1 X 5) + (2 X 7)} {(1 X 6) + (2 X 8)}
{(3 X 5) + (4 X 7)} {(3 X 6) + (4 X 8)}
위 처럼 계산 되어
19 22
43 50
결과 값은 위에 같음.
반복문 중첩 안 쓰면서 수학적 계산 방법으로 로직을 짜다보니 복잡해짐.