Java
프로그래머스: 행렬의 곱셈
Daeryuk Kim
2024. 3. 7. 13:02
import java.util.*;
class Solution {
public int[][] solution(int[][] arr1, int[][] arr2) {
int r1 = arr1.length;
int c1 = arr1[0].length;
int r2 = arr2.length;
int c2 = arr2[0].length;
if (c1 != r2) return null;
// 행렬 곱셈은 첫 번째 행렬의 열의 수와
// 두 번째 행렬의 행의 수가 같아야 함
int[][] answer = new int[r1][c2];
// 행렬1의 행의 개수(3)만큼 반복하되,
// 결국 제일 많이 반복되는 건 행렬1의 열인 k이다.
// 즉, 행렬2의 열의 수(2) * 행렬1의 열의 수(2)만큼 반복한다.
/* 0 1 0 1
0: [1, 4] [3, 3] ->j=0) 3 = 1(0,'0') * 3('0',0), 12 = 4(0,'1') * 3('1',0)
1: ... [3, 3] j=1) 3 = 1(0,'0') * 3('0',1), 12 = 4(0,'1') * 3('1',1)
*/
for (int i = 0; i < r1; i++) {//행렬1의 행 개수 (ㅡ)
for (int j = 0; j < c2; j++) { //행렬2의 열 개수 (|)
for (int k = 0; k < c1; k++) { //"행렬1"의 열 개수 (|)
answer[i][j] += arr1[i][k] * arr2[k][j];
}
}
}
return answer;
}
public static void main(String[] args) {
int[][] arr1 = {
{1,4},
{3,2},
{4,1}
};
int[][] arr2 = {
{3,3},
{3,3},
};
Solution sol = new Solution();
int[][] result = sol.solution(arr1, arr2);
for(int i=0; i<result.length; i++){
for(int j=0; j<result[i].length; j++){
System.out.print(result[i][j] + " ");
}
System.out.println();
}
}
}