
C[i][j] = Σ(A[i][k] * B[k][j])를 수행하여 행렬곱셈하였다.
시간복잡도: O(N³), 공간복잡도: O(N²)
import java.util.*;
import java.io.*;
class Main {
public static void main (String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st = new StringTokenizer(br.readLine());
int An = Integer.parseInt(st.nextToken());
int Am = Integer.parseInt(st.nextToken());
int [][] A = new int[An][Am];
for(int i=0;i<An;i++){
st = new StringTokenizer(br.readLine());
for(int j=0;j<Am;j++){
A[i][j]= Integer.parseInt(st.nextToken());
}
}
st = new StringTokenizer(br.readLine());
int Bn = Integer.parseInt(st.nextToken());
int Bm = Integer.parseInt(st.nextToken());
int [][] B = new int[Bn][Bm];
for(int i=0;i<Bn;i++){
st = new StringTokenizer(br.readLine());
for(int j=0;j<Bm;j++){
B[i][j]= Integer.parseInt(st.nextToken());
}
}
int [][] C = new int[An][Bm];
for(int i=0;i<An;i++){
for(int j=0;j<Bm;j++){
for(int k=0;k<Am;k++){
C[i][j] += A[i][k]*B[k][j];
}
}
}
for(int i=0;i<An;i++){
for(int j=0;j<Bm;j++){
sb.append(C[i][j]).append(" ");
}
sb.append("\n");
}
System.out.print(sb);
}
}
