수학에서 배운 그 행렬의 곱셈이 맞다. 각 테이블의 행과 열 곱의 합을 계산하는 문제이다.
https://ko.wikipedia.org/wiki/%ED%96%89%EB%A0%AC_%EA%B3%B1%EC%85%88
의외로 많은 시간이 소비되었던 부분이다. 2차원배열에서 열은 내부배열이고 행은 외부배열이다(행이 열을 감싼 구조) 따라서 앞 테이블의 행
개수 x 뒷 테이블의 열
개수 만큼 반복해야 결과 테이블이 완성될 수 있다.
int[][] answer = new int[arr1.length][arr2[0].length];
//arr1은 앞테이블, arr2은 뒷테이블
일반적인 중첩 for문의 인덱스를 쓰듯이 i,j,k를 쓴다고 가정하자.
i는 앞테이블의 행을 가리킴 arr1[i][]
j는 뒷테이블의 열을 가리킴 arr2[][j]
k는 앞테이블의 열과 뒷테이블의 행을 가리킴 arr1[i][k], arr2[k][j]
각 요소의 곱을 합해야 하므로
temp += arr1[i][k] * arr2[k][j]
for(int i=0;i<arr1.length;i++){ // 앞테이블의 행
for(int j=0;j<arr2[0].length;j++){ //뒷 테이블의 열
temp=0; //뒷 테이블의 열 마다
for(int k=0;k<arr2.length;k++) //앞테이블의 열, 뒷 테이블의 행
temp += arr1[i][k] * arr2[k][j]; //각 요소의 곱을 합한다
answer[i][j] = temp; //요소의 합 저장
}
}
class Solution {
public int[][] solution(int[][] arr1, int[][] arr2) {
int[][] answer = new int[arr1.length][arr2[0].length];
int temp;
for(int i=0;i<arr1.length;i++){ // 앞테이블의 행
for(int j=0;j<arr2[0].length;j++){ //뒷 테이블의 열
temp=0; //뒷 테이블의 열 마다
for(int k=0;k<arr2.length;k++) //앞테이블의 열, 뒷 테이블의 행
temp += arr1[i][k] * arr2[k][j]; //각 요소의 곱을 합한다
answer[i][j] = temp; //요소의 합 저장
}
}
return answer;
}
}