Algorithm/Baekjoon BOJ
[백준][C++] 2740: 행렬 곱셈
CtrlZ
2022. 11. 21. 15:50
반응형
https://www.acmicpc.net/problem/2740
2740번: 행렬 곱셈
첫째 줄에 행렬 A의 크기 N 과 M이 주어진다. 둘째 줄부터 N개의 줄에 행렬 A의 원소 M개가 순서대로 주어진다. 그 다음 줄에는 행렬 B의 크기 M과 K가 주어진다. 이어서 M개의 줄에 행렬 B의 원소 K개
www.acmicpc.net
- 문제
N * M 행렬과 M * K 행렬이 주어지면 행렬 곱셈을 이용해서 N * K 행렬을 만드는 문제다.
- 해설
실버 5 문제라 쉽게 풀릴 줄 알았는데, 생각보다 시간이 많이 걸렸다.
- 풀이
#include <iostream>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N, M, K, temp;
int A[101][101], B[101][101], answer[101][101];
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++) // N * K 행렬을 만들어야 함
{
for (int k = 0; k < M; k++) // 각 구역마다 M번 만큼 반복해야 함
{
answer[i][j] += A[i][k] * B[k][j];
}
cout << answer[i][j] << ' ';
}
cout << '\n';
}
// or
// for (int i = 0; i < N; i++)
// {
// for (int j = 0; j < K; j++)
// {
// cout << answer[i][j] << ' ';
// }
// cout << '\n';
// }
return 0;
}
- 새롭게 알게 된 점
반응형