백준
백준 2740 행렬 곱셈(Java)
Park DJ
2023. 1. 22. 01:00
https://www.acmicpc.net/problem/2740
2740번: 행렬 곱셈
첫째 줄에 행렬 A의 크기 N 과 M이 주어진다. 둘째 줄부터 N개의 줄에 행렬 A의 원소 M개가 순서대로 주어진다. 그 다음 줄에는 행렬 B의 크기 M과 K가 주어진다. 이어서 M개의 줄에 행렬 B의 원소 K개
www.acmicpc.net

해석 및 팁
이 문제를 풀려면 행렬곱셈의 정의를 알고 있어야 합니다. 간단히 설명하면 아래의 사진과 같습니다.

https://ko.wikipedia.org/wiki/%ED%96%89%EB%A0%AC_%EA%B3%B1%EC%85%88
행렬 곱셈 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 행렬 곱셈을 위해선 첫째 행렬의 열 갯수와 둘째 행렬의 행 갯수가 동일해야한다. 곱셈의 결과 새롭게 만들어진 행렬은 첫째 행렬의 행 갯수와 둘째 행렬의 열
ko.wikipedia.org
먼저 반복문의 통해 A행렬과 B행렬의 값을 저장한후 공식에 따라 StringBuilder에 저장한 후에 출력해 주면 됩니다.
Java 코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
StringBuilder sb = new StringBuilder();
int N = sc.nextInt();
int M = sc.nextInt();
int[][] a = new int[N][M];
for(int i = 0; i < N; i++) {
for(int j = 0; j < M; j++) {
a[i][j] = sc.nextInt();
}
}
M = sc.nextInt();
int K = sc.nextInt();
int[][] b = new int[M][K];
for(int i = 0; i < M; i++) {
for(int j = 0; j < K; j++) {
b[i][j] = sc.nextInt();
}
}
for(int i = 0; i < N; i++) {
for(int j = 0; j < K; j++) {
int sum = 0;
for(int k = 0; k < M; k++) {
sum += a[i][k] * b[k][j];
}
sb.append(sum).append(" ");
}
sb.append('\n');
}
System.out.println(sb);
}
}