Computer Science/Algorithm Problem

백준] 2740 - 행렬 곱셈

TwinParadox 2018. 7. 13. 21:10
728x90

시간 제한 : 1초

메모리 제한 : 128MB




입력

첫째 줄에 행렬 A의 크기 N 과 M이 주어진다. 둘째줄부터 N개의 줄에 행렬 A의 원소 M개가 차레대로 주어진다. 그 다음 줄에는 행렬 B의 크기 M과 K가 주어진다. 이어서 M개의 줄에 행렬 B의 원소 K개가 차례대로 주어진다. N과 M, 그리고 K는 100보다 작거나 같고, 행렬의 원소는 절대값이 100보다 작거나 같은 정수이다.




출력

첫째줄부터 N개의 줄에 행렬 A와 B를 곱한 행렬을 출력한다. 행렬의 각 원소는 공백으로 구분한다.




소스코드

#include <iostream>
using namespace std;
int main(void)
{
	int A[100][100], B[100][100], C[100][100] = { 0, }, n, m, k;
	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++)
			{
				C[i][j] += A[i][l] * B[l][j];
			}
		}
	}
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < k; j++)
			cout << C[i][j] << ' ';
		cout << '\n';
	}
}




Tip

행렬 곱셈만 구현해주면 되는 단순한 구현 문제다. 이중 배열을 활용하면 된다.



728x90