행렬의 곱셈 (자바)

김재현·2023년 12월 21일
0

알고리즘 풀이

목록 보기
63/89

문제

정답 코드

class Solution {
    public int[][] solution(int[][] arr1, int[][] arr2) {
        int[][] answer = new int[arr1.length][arr2[0].length];

        for (int i=0;i<arr1.length;i++) {
            for (int j=0;j<arr2[0].length;j++) {
                for (int k = 0; k < arr2.length; k++) {
                    answer[i][j] += arr1[i][k] * arr2[k][j];
                }
            }
        }
        return answer;
    }
}

행렬을 종이에 그려보면 쉬웠다.

다만 실수할 수 있는 부분은 arr2[0].length라는 것! arr2.lenght가 아니다.

행렬의 곱셈은 행과 열의 개수를 A,B,C라고 할 때 A*B X B*C 인데,
이 때 행렬의 곱셈이 수행되면 A*C가 된다. 따라서 C인 arr2[0].length로 한 것.

그리고 곱해진 행렬의 i번째 행, j번째 열을 구해야하므로 answer[i][j]을 놓는다.
arr1[i][k] * arr2[k][j]와 같이 준다음, k를 증가시키며 서로 곱해준 뒤 더하면 원하는 값이 나온다.


(다들 비슷하게 풀이하여 다른 사람의 풀이는 생략해도 될 것 같다.)

profile
I live in Seoul, Korea, Handsome

0개의 댓글