문제 설명
2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.
제한 조건
- 행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
- 행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.
- 곱할 수 있는 배열만 주어집니다.
입출력 예
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]] |
행렬의 곱셉방법
Logic
result의 행의 길이 === arr1의 행의 길이
result의 열의 길이 === arr2의 열의 길이
arr1의 행(row, y)과 arr2의 열(col,x)의 대응되는 곱셉의 합
// (y,x)
// (row, col)
function solution(arr1, arr2) {
// result의 크기
const [row, col] = [arr1.length, arr2[0].length];
console.log('row:', row);
console.log('col:', col);
// result배열 만들기
let result = new Array(row);
console.log('result:', result);
// (y,x)
// (row, col)
for (let i = 0; i < row; i++) {
result[i] = new Array(col);
console.log('result in for:', result);
}
// arr1의 열의 개수 === arr2의 행의 개수,
// arr1의 i번째 행과 arr2의 j번째 열의 원소들을 곱한 것들의 합이
// result[i][j] 값
for (let i = 0; i < row; i++) {
for (let j = 0; j < col; j++) {
result[i][j] = arr1[i].reduce((sum, arr1Value, rowIndex) => {
console.log(`arr1[${i}]`);
console.log('sum:', sum);
console.log('arr1Value:', arr1Value);
console.log('rowIndex:', rowIndex);
return sum + arr1Value * arr2[rowIndex][j];
}, 0);
}
}
return result;
}
정확성 테스트
테스트 1 〉 통과 (3.70ms, 32.2MB)
테스트 2 〉 통과 (26.20ms, 33.8MB)
테스트 3 〉 통과 (26.17ms, 34.1MB)
테스트 4 〉 통과 (0.78ms, 30.4MB)
테스트 5 〉 통과 (14.71ms, 34.2MB)
테스트 6 〉 통과 (12.85ms, 34MB)
테스트 7 〉 통과 (1.17ms, 30.5MB)
테스트 8 〉 통과 (0.70ms, 30.1MB)
테스트 9 〉 통과 (0.37ms, 30.1MB)
테스트 10 〉 통과 (14.92ms, 33.8MB)
테스트 11 〉 통과 (4.26ms, 32.2MB)
테스트 12 〉 통과 (1.01ms, 30.2MB)
테스트 13 〉 통과 (9.43ms, 33.8MB)
테스트 14 〉 통과 (16.38ms, 33.8MB)
테스트 15 〉 통과 (5.32ms, 32MB)
테스트 16 〉 통과 (3.70ms, 32.7MB)
가로/세로, 행/열, x/y는 순서가 매번 헷갈리는 것같다...