https://www.acmicpc.net/problem/2740
C
#include <stdio.h>
int main()
{
int n, m, k, a[101][101], b[101][101], result[101][101] = { 0, };
scanf("%d %d", &n, &m);
for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) scanf("%d", &a[i][j]);
scanf("%d %d", &m, &k);
for (int i = 0; i < m; i++) for (int j = 0; j < k; j++) scanf("%d", &b[i][j]);
for (int i = 0; i < n; i++) for (int j = 0; j < k; j++) for (int u = 0; u < m; u++) result[i][j] += a[i][u] * b[u][j];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < k; j++) printf("%d ", result[i][j]);
printf("\n");
}
return 0;
}
C++
#include <iostream>
using namespace std;
int main()
{
int n, m, k, a[101][101], b[101][101], result[101][101] = { 0, };
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];
for (int i = 0; i < n; i++) for (int j = 0; j < k; j++) for (int l = 0; l < m; l++) result[i][j] += a[i][l] * b[l][j];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < k; j++) cout << result[i][j] << " ";
cout << "\n";
}
return 0;
}
코드 설명
행렬 a의 크기 n,m을 입력받고 반복문을 이용해 행렬 a에 값을 저장한다. 이후 행렬 b의 크기를 m,k를 입력받고 반복문을 이용해 행별 b에 값을 저장한다.
행렬의 곱셈 결과로 만들어지는 행렬의 크기는 n×k이니 반복문을 중첩해서 결과를 구한다.
느낀 점
행렬의 곱셈 방법만 알면 금방 푸는 문제였다!
'PS (C, C++)' 카테고리의 다른 글
[백준/C & C++] 1347 미로 만들기 (0) | 2023.01.31 |
---|---|
[백준/C & C++] 3273 두 수의 합 (0) | 2023.01.30 |
[백준/C & C++] 1124 언더프라임 (0) | 2023.01.28 |
[백준/C & C++] 1269 대칭차집합 (0) | 2023.01.27 |
[백준/C & C++] 1764 듣보잡 (0) | 2023.01.26 |