본문 바로가기

프로그래머스 2단계 - 행렬의 곱셈 본문

알고리즘/2단계

프로그래머스 2단계 - 행렬의 곱셈

개발자로 거듭나기 2022. 11. 29. 09:25
반응형

2 단계 : 행렬의 곱셈

코딩테스트 연습 > 연습문제 > 행렬의 곱셈


문제 설명

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]]

반응형

코드

function solution(arr1, arr2) {
    const [row, col] = [arr1.length, arr2[0].length];
    let answer = new Array(row);
    for (let i = 0; i < row; i++) answer[i] = new Array(col);
    // [[emptyset], [emptyset], [emptyset]
    
        for (let i = 0; i < row; i++) { // 1,2,3
            for (let j = 0; j < col; j++) { // 1,2
                // reduce(누적값, 현재값, 현재 인덱스 값);
                answer[i][j] = arr1[i].reduce((sum, arr1Value, rowIndex) => {
                    return sum + (arr1Value * arr2[rowIndex][j]);
            }, 0)
        }
    }
    return answer;
}

리뷰

순서는 다음과 같다
1. 공식이 있습니다. 두 행렬의 곱셈은 (m * k)행렬 * (k * n)행렬은 k가 같은 수여야지만 곱할 수 있습니다.
2. 또한 결과는 m * n 행렬이 나오게 됩니다. 따라서 row, col을 셋팅합니다.
3. 행렬의 곱셈은 m * k 행렬의 첫번째 행과 k * n 의 첫번째 열을 곱합니다.
4. 따라서 arr1[0]의 첫번째 원소와 arr2[현재인덱스][j] 값을 해줘야 계산이 됩니다.
5. 다음은 arr1[0[의 다음 원소와 arr2[현재인덱스][증가한j 값] 이렇게 곱해주면 되죠? 이걸 계속 반복합니다.

총평 : 머릿속에서 잘 그려지지 않네요.

출처 : https://school.programmers.co.kr/learn/courses/30/lessons/12949
반응형
Comments