행렬의 곱셈 (level2)

원용현·2022년 9월 20일
0

프로그래머스

목록 보기
22/49

링크

https://school.programmers.co.kr/learn/courses/30/lessons/12949

문제

주어진 행렬 두 개를 곱해서 반환하라. (주어지는 두 배열은 두 배열이 곱할 수 있는 형태로 주어진다.)

예제로 이해

arr1 = [[1, 4], [3, 2], [4, 1]]
arr2 = [[3, 3], [3, 3]]

위의 두 배열을 곱해서 새롭게 반환되는 배열은 다음과 같다.

result = [[1x3 + 4x3, 1x3 + 4x3], [3x3 + 2x3, 3x3 + 2x3], [4x3 + 1x3, 4x3 + 1x3]] = [[15, 15], [15, 15], [15, 15]]

코드

function solution(arr1, arr2) {
    let result = []
    let temp = []
    let total = 0
    
    for(let i = 0; i < arr1.length; i++) {
        for(let j = 0; j < arr2[0].length; j++) {
            arr1[i].map((el, index) => {
                total += el * arr2[index][j]
            })
          	temp.push(total)
            total = 0
        }
        result.push(temp)
        temp = []
    }
    
    return result
}

코드 풀이

문제 자체는 3중 for문을 구현하여 풀이하면 쉽게 풀 수 있다.

반복은 arr1의 길이, arr2 배열 요소안의 배열의 길이 만큼 반복되며 세번째 반복문에서는 실질적인 곱셈 계산 후에 반환해줄 배열에 push 해주는 코드가 작성된다.

계산에 사용될 숫자를 뽑을 때 특정하게 지정해서 뽑는 것이 아닌 반복에 사용되는 변수들로 지정을 해야하기 때문에 변수 지정만 조심한다면 어렵지 않게 풀이가 가능하다.

아래는 행렬의 곱셈에 대해 자세하게 설명된 링크이다.
https://mathbang.net/562

0개의 댓글