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를 증가시키며 서로 곱해준 뒤 더하면 원하는 값이 나온다.
(다들 비슷하게 풀이하여 다른 사람의 풀이는 생략해도 될 것 같다.)