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

leehyunjon·2022년 11월 30일
0

Algorithm

목록 보기
136/162

행렬의 곱셈 : https://school.programmers.co.kr/learn/courses/30/lessons/12949


Problem


Solve

출처

행렬의 곱이란 특정 행과 열이 있을때, arr1의 행 값들과 arr2의 열 값들의 곱의 합을 구하는 것입니다.

행렬의 곱이 성사되기 위해서는 arr1의 열의 크기와 arr2의 행의 크기가 동일해야하는 조건이 있습니다.
그리고 행렬의 곱의 결과는 arr1의 행의 크기, arr2의 열의 크기가 행렬의 곱 배열의 행과 열이 됩니다.

이를 기반으로 행렬곱의 결과를 담는 배열의 크기를 [arr1 행의 크기][arr2 열의 크기]로 초기화합니다.

행렬 곱의 배열을 순환하면서 해당 좌표(i,j)에 arr1과 arr2의 공통된 크기 arr1 열의 크기를 기준으로 arr[i][k]*arr[k][j]의 합으로 갱신해줍니다.

int[][] answer = new int[arr1R][arr2C];
for(int r=0;r<arr1R;r++){
	for(int c=0;c<arr2C;c++){
		int sum = 0;
		for(int k=0;k<arr1C;k++){
			sum += arr1[r][k]*arr2[k][c];
		}
		answer[r][c] = sum;
	}
}

Code

class Solution {
    public int[][] solution(int[][] arr1, int[][] arr2) {
        int arr1R = arr1.length;
        int arr1C = arr1[0].length;
        int arr2R = arr1C;
        int arr2C = arr2[0].length;
        
        int[][] answer = new int[arr1R][arr2C];
        for(int r=0;r<arr1R;r++){
            for(int c=0;c<arr2C;c++){
                int sum = 0;
                for(int k=0;k<arr1C;k++){
                    sum += arr1[r][k]*arr2[k][c];
                }
                answer[r][c] = sum;
            }
        }
        
        return answer;
    }
}

Result


Reference

https://hanxxang.tistory.com/63

profile
내 꿈은 좋은 개발자

0개의 댓글