https://www.acmicpc.net/problem/2740
import java.util.*;
import java.io.*;
public class Main {
static BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
static BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
static int[][] matrixA, matrixB, matrix_result;
public static void main(String args[]) throws Exception {
String s[]=br.readLine().split(" ");
int n=Integer.parseInt(s[0]);
int m=Integer.parseInt(s[1]);
matrixA=new int[n][m];
for(int i=0;i<n;i++) {
String s1[]=br.readLine().split(" ");
for(int j=0;j<m;j++) {
matrixA[i][j]=Integer.parseInt(s1[j]);
}
}
String s2[]=br.readLine().split(" ");
m=Integer.parseInt(s2[0]);
int k=Integer.parseInt(s2[1]);
matrixB=new int[m][k];
for(int i=0;i<m;i++) {
String s3[]=br.readLine().split(" ");
for(int j=0;j<k;j++) {
matrixB[i][j]=Integer.parseInt(s3[j]);
}
}
matrix_result=new int[n][k];
for(int i=0;i<n;i++) {
for(int j=0;j<k;j++) {
for(int l=0;l<m;l++) {
matrix_result[i][j]+=matrixA[i][l]*matrixB[l][j];
}
}
}
for(int i=0;i<n;i++) {
for(int j=0;j<k;j++) {
bw.write(matrix_result[i][j]+" ");
}
bw.write("\n");
}
bw.flush();
bw.close();
}
}
행렬 곱셈에 대한 내용은 아래 링크에 들어가 보시면 자세한 내용을 보실 수 있습니다.
https://ko.wikipedia.org/wiki/%ED%96%89%EB%A0%AC_%EA%B3%B1%EC%85%88
N*M 행렬과 M*K 행렬을 곱하면 N*K 행렬이 생기는데요, 이를 이용해서 결과 값을 저장할 N*K 크기의 이중 배열을 생성하고, 행렬 곱에 대한 내용을 삼중 for문으로 나타내 보았습니다.
'프로그래밍 문제 > BOJ(백준 온라인 저지)' 카테고리의 다른 글
[BOJ 1920번] 수 찾기(JAVA) (0) | 2020.09.01 |
---|---|
[BOJ 10830번] 행렬 제곱 (0) | 2020.09.01 |
[BOJ 2004번] 조합 0의 개수(JAVA) (0) | 2020.08.14 |
[BOJ 1676번] 팩토리얼 0의 개수(JAVA) (0) | 2020.08.14 |
[BOJ 2609번] 최대공약수와 최소공배수(JAVA) (feat. 유클리드 호제법) (0) | 2020.08.14 |