개발새발 로그

[JS] 프로그래머스 : 행렬의 곱 본문

알고리즘

[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)))
}

어려웠던 이유

  1. 행렬의 곱셈 개념이 필요하다.
  2. AXB 행렬과 BXC 행렬을 곱하면 AXC행렬이 된다. (B가 같을 때만 곱할 수 있다.)3.
  3. 행렬A에 행렬B를 곱하면 다음과 같다.

즉 [ (arr[i][k] * arr[k][j] , arr[i][k] * arr[k][j]) , … ]

이런식으로 간다. k가 증가하고, 그다음 j가증가한다.

728x90
반응형
LIST