행렬 곱을 구현하면 되는 문제입니다.
A가 $\begin{pmatrix} a_{11} & a_{12} \\ a_{21} & a_{22} \end{pmatrix}$,
B가 $\begin{pmatrix} b_{11} & b_{12} \\ b_{21} & b_{22} \end{pmatrix}$ 라고 가정했을 때
두 행렬의 곱은 $\begin{pmatrix} a_{11}b_{11}+a_{12}b_{21} & a_{11}b_{12}+a_{12}b_{22} \\ a_{21}b_{11}+a_{22}b_{21} & a_{21}b_{21}+a_{22}b_{22} \end{pmatrix}$ 으로 나타낼 수 있습니다.
반복문을 통해 간단히 구현하면 되는 문제입니다.
#include<iostream>
using namespace std;
const int MAX = 100;
int n, m, k;
int A[MAX][MAX];
int B[MAX][MAX];
int res[MAX][MAX];
void mult(void)
{
for (int i = 0; i < n; i++) {
for (int j = 0; j < k; j++) {
for (int k = 0; k < m; k++) {
res[i][j] += A[i][k] * B[k][j];
}
}
}
}
int main(void)
{
cin >> n >> m;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> A[i][j];
}
}
cin >> m >> k;
for (int i = 0; i < m; i++) {
for (int j = 0; j < k; j++) {
cin >> B[i][j];
}
}
mult();
for (int i = 0; i < n; i++) {
for (int j = 0; j < k; j++) {
cout << res[i][j] << " ";
}
cout << "\n";
}
return 0;
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준/C,C++] 11444번: 피보나치 수 6 (0) | 2021.03.26 |
---|---|
[백준/C,C++] 10830번: 행렬 제곱 (0) | 2021.03.26 |
[백준/C,C++] 11401번: 이항 계수 3 (0) | 2021.03.26 |
[백준/C,C++] 11051번: 이항 계수 2 (0) | 2021.03.26 |
[백준/C,C++] 1629번: 곱셈 (0) | 2021.03.25 |
댓글