행렬의 곱셈
행렬의 곱셈 설명 링크
수식
C[i][j] = A[i][1]B[1][j] + A[i][2]B[2][j] + ... + A[i][n]*B[n][j]
function solution(arr1, arr2) {
let result = [];
for(let i = 0; i<arr1.length; i++){
let newArr = []
for(let j = 0; j<arr2.length; j++){
// A[i][n]B[n][j]의 값을 담을 변수
let temp = 0;
for(let n=0; n<arr1[0].length; n++){
temp += arr1[i][n]*arr2[n][j]
}
newArr.push(temp)
}
result.push(newArr)
}
return result;
}
해당 코드로 돌렸더니 예시의 테스트는 모두 통과했지만 제출 후 실제 테스트는 모조리 틀림
arr1 : [[2, 3, 2], [4, 2, 4], [3, 1, 4]]
arr2 : [[5, 4], [2, 4], [3, 1]]
와 같이 arr2의 배열 길이와 안에 있는 배열의 길이가 다른 케이스 때문
j의 상한을 arr2의 배열 길이가 아니라, arr2의 안에 있는 배열의 길이로 수정
function solution(arr1, arr2) {
let result = [];
for(let i = 0; i<arr1.length; i++){
let newArr = []
for(let j = 0; j<arr2[0].length; j++){
let temp = 0;
for(let n=0; n<arr1[0].length; n++){
temp += arr1[i][n]*arr2[n][j]
}
newArr.push(temp)
}
result.push(newArr)
}
return result;
}
function solution(arr1, arr2) {
return arr1.map((row) => arr2[0].map((x,y) => row.reduce((a,b,c) => a + b * arr2[c][y], 0)))
}