No Rules Rules

행렬 곱셈 (feat. 백준, 2740번) 본문

생활/코테

행렬 곱셈 (feat. 백준, 2740번)

개발하는 완두콩 2022. 8. 15. 22:30
728x90
반응형

행렬 곱셈
https://www.acmicpc.net/problem/2740

 

2740번: 행렬 곱셈

첫째 줄에 행렬 A의 크기 N 과 M이 주어진다. 둘째 줄부터 N개의 줄에 행렬 A의 원소 M개가 순서대로 주어진다. 그 다음 줄에는 행렬 B의 크기 M과 K가 주어진다. 이어서 M개의 줄에 행렬 B의 원소 K개

www.acmicpc.net

 

반응형

 

// woohyeon.kim
// kim519620.tistory.com
#include <iostream>
using namespace std;
int main() {
	ios::sync_with_stdio(false), cin.tie(NULL);
	register int arr1[100][100], arr2[100][100], ans[100][100];
	register int N, M, K;
	cin >> N >> M;
	for (register int n = 0, m; n < N; ++n)
		for (m = 0; m < M; ++m)
			cin >> arr1[n][m];
	cin >> M >> K;
	for (register int m = 0, k; m < M; ++m)
		for (k = 0; k < K; ++k)
			cin >> arr2[m][k];
	fill(&ans[0][0], &ans[N][K], 0);
	for (register int n = 0, m, k; n < N; ++n) {
		for (k = 0; k < K; ++k){
			for (m = 0; m < M; ++m)
				ans[n][k] += arr1[n][m] * arr2[m][k];
		}
	}
	for (register int n = 0, k; n < N; ++n) {
		for (k = 0; k < K; ++k)
			cout << ans[n][k] << " ";
		cout << "\n";
	}
	return 0;
}
// *&)*@*

2차원 배열간의 곱의 방법을 안다면, N M K간 연산을 통해 답을 구할 수 있습니다.

A[3][2] * B[2][3]에서

A[0][0] * B[0][0] + A[0][1] * B[1][0] = C[0][0]

A[0][0] * B[0][1] + A[0][1] * B[1][1] = C[0][1]

...

A[1][0] * B[0][0]  + A[1][1] * B[1][0] = C[1][0]

A[1][0] * B[0][1] + A[1][1] * B[1][1] = C[1][1]

...

형태로 2차원 배열 C를 구할 수 있습니다.

728x90
반응형
Comments