알고리즘
[JS] 프로그래머스 : 행렬의 곱
이즈흐
2023. 6. 14. 21:12
행렬의 곱셈
2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.
제한 조건- 행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
- 행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.
- 곱할 수 있는 배열만 주어집니다.
[[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]] |
[[1, 4], [3, 2], [4, 1]] | [[3, 3], [3, 3]] | [[15, 15], [15, 15], [15, 15]] |
내 제출
function solution(arr1, arr2){
var answer = []
var sum = 0
var temp = []
for(var i=0; i<arr1.length; i++){
for(var j=0; j<arr2[0].length; j++){
for(var k=0; k<arr2.length; k++){
sum = sum + arr1[i][k] * arr2[k][j]
}
temp.push(sum)
sum = 0
}
answer.push(temp)
temp = []
}
return answer
}
다른풀이
function solution(arr1, arr2) {
return arr1.map((row) => arr2[0].map((x,y) => row.reduce((a,b,c) => a + b * arr2[c][y], 0)))
}
어려웠던 이유
- 행렬의 곱셈 개념이 필요하다.
- AXB 행렬과 BXC 행렬을 곱하면 AXC행렬이 된다. (B가 같을 때만 곱할 수 있다.)3.
- 행렬A에 행렬B를 곱하면 다음과 같다.
즉 [ (arr[i][k] * arr[k][j] , arr[i][k] * arr[k][j]) , … ]
이런식으로 간다. k가 증가하고, 그다음 j가증가한다.
728x90
반응형
LIST