[프로그래머스] 행렬의 곱셈

정호·2023년 8월 19일
0

문제 풀이

목록 보기
44/60

문제 링크

1️⃣ 문제 설명

2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.


2️⃣ 제한 사항

  • 행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
  • 행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.
    곱할 수 있는 배열만 주어집니다.

3️⃣ 입출력 예

4️⃣ 나의 풀이

function solution(arr1, arr2) {
    const newArr = [];

    for(let i = 0; i < arr1.length; i++) {
        let result = [];
        for(let j = 0; j < arr2[0].length; j++) {
            let elem = 0;
            for(let k = 0; k < arr2.length; k++) {
                elem += arr1[i][k] * arr2[k][j];
            }
            result.push(elem);
        }
        newArr.push(result);
    }
    return newArr;
}

기본적인 행렬 원리

result[0, 0] = ( arr1[0, 0] arr2[0, 0] ) + ( arr1[0, 1] arr2[1, 0] ) + ( arr1[0, 2] * arr2[2, 0] )

  • 행렬의 곱셈을 하기 위해서는 B와 C가 같을 때만 가능하고 곱셈에 대한 결과값은 A*D이다.
    설명에서 곱할 수 있는 배열만 주어진다고 했으므로 B와 C가 같은지는 판단하지 않아도 된다.

for 3중문
가장 바깥쪽 반복문의 iA (= arr1.length)

  • j는 result의 열의 개수이며 D (=arr2[0].length)
  • k는 result의 한 칸의 값을 구하기 위해 실제 반복해야하는 수로 B와 C
    (arr1[0].length || arr2.length).
  • k의 반복문에서 arr1과 arr2의 각 칸을 곱한값을 구하고 이 값을 더해서 임시로 저장할 변수가 필요하다.
  • 이 변수를 j가 있는 반복문 시작시에 선언하여 k반복문이 끝날 때마다 이 변수에 +=을 통해 더한 값을 저장해주어야 합니다. 답안에서의 elem변수의 역할
    k의 반복문이 끝나면 result의 칸에 들어갈 값을 elem변수가 가지게 되므로 리턴 할 배열에 push를 해주면 된다
    결과값은 2차원 배열이므로 i의 반복문이 끝날때마다 결과값에 push
profile
열심히 기록할 예정🙃

0개의 댓글