sm 기술 블로그
169. 2740(행렬곱셈) - 자바 본문
import java.util.*;
import java.io.*;
class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] tmpNM = br.readLine().split(" ");
int N = Integer.parseInt(tmpNM[0]);
int M = Integer.parseInt(tmpNM[1]);
int[][] A = new int[N][M];
for (int i = 0; i < N; i++) {
String[] tmpA = br.readLine().split(" ");
for (int j = 0; j < M; j++) {
A[i][j] = Integer.parseInt(tmpA[j]);
}
}
String[] tmpMK = br.readLine().split(" ");
M = Integer.parseInt(tmpMK[0]);
int K = Integer.parseInt(tmpMK[1]);
int[][] B = new int[M][K];
for (int i = 0; i < M; i++) {
String[] tmpB = br.readLine().split(" ");
for (int j = 0; j < K; j++) {
B[i][j] = Integer.parseInt(tmpB[j]);
}
}
int[][] result = new int[N][K];
for (int n = 0; n < N; n++) {
for (int k = 0; k < K; k++) {
for (int m = 0; m < M; m++) {
result[n][k] += A[n][m] * B[m][k];
}
}
}
for (int n = 0; n < N; n++) {
for (int k = 0; k < K; k++) {
System.out.print(result[n][k] + " ");
}
System.out.println();
}
}
}
문제요약
행렬 곱을 진행하라
설명
이 문제의 핵심은 아래와 같다.
N*M 행렬과 M*K 행렬을 곱하면 N*K행렬이 나온다.
숫자가 작기 때문에 크게 어렵게 생각할 것 없이 행렬곱 식을 그대로 사용하면 된다.
따라서
for (int n = 0; n < N; n++) {
for (int k = 0; k < K; k++) {
for (int m = 0; m < M; m++) {
result[n][k] += A[n][m] * B[m][k];
}
}
}
다음과 같은 식이 나오게 된 것이다.
'문제 > 백준_자바' 카테고리의 다른 글
171. 10830(피보나치 수 6) - 자바 (0) | 2022.08.05 |
---|---|
170. 10830(행렬 제곱) - 자바 (0) | 2022.08.04 |
168. 1629(이항계수3) - 자바 (0) | 2022.08.01 |
167. 1629(곱셈) - 자바 (0) | 2022.07.31 |
166. 1780(종이의 개수) - 자바 (0) | 2022.07.31 |
Comments