천리길도 한걸음부터

문제05. 행렬의 곱셈⭐ 본문

코딩 테스트 합격자 되기_자바💜

문제05. 행렬의 곱셈⭐

밤연양갱 2024. 8. 10. 12:53
- 저자 권장 시간 : 40
- 권장 시간 복잡도 : O(N^2)
- 출제 : 연습문제

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

제약조건
- 행렬 arr1, arr2의 행과 열의 길이는 2이상 100이하입니다.
- 행렬 arr1, arr2의 데이터는 -10 이상 20 이하인 자연수입니다.
- 곱할 수 있는 배열만 주어집니다.

class Solution {
    public int[][] solution(int[][] arr1, int[][] arr2) {
        // 1. 행렬 arr1과 arr2의 행과 열의 수
        int r1 = arr1.length;
        int c1 = arr1[0].length;
        int r2 = arr2.length;
        int c2 = arr2[0].lenght;

        // 2. 결과를 저장할 2차원 배열 초기화
        int[][] answer = new int[r1][c2];

        // 3. 첫 번째 행렬 arr1의 각 행과 두 번재 행렬 arr2의 각 열에 대해
        for(int i=0; i<r1; i++) {
            for(int j=0; j<c2; j++) {
                // 4. 두 행렬의 데이터를 곱해 결과 리스트에 더함
                for (int k=0; i<c1; k++) {
                    answer[i][j] += arr1[i][k] * arr2[k][i]
                }

                answer[i][j] += arr1[i][j]*arr2[i][j];
                // case1 : answer[0][0] = arr1[0][0]*arr2[0][0];
                // case2 : answer[0][0] = arr1[0][1]*arr2[1][0];

                // case3 : answer[0][1] = arr1[0][0]*arr2[0][1];
                // case4 : answer[0][1] = arr1[0][1]*arr2[1][0];
            }
        }
        return answer;
    }
}