본문 바로가기
문제 풀이/백준(BOJ)

[C++] 백준 2740번 : 행렬 곱셈

by 희조당 2021. 7. 30.
728x90

https://www.acmicpc.net/problem/2740

 

2740번: 행렬 곱셈

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

www.acmicpc.net


 문제 풀이

쉬운 행렬의 곱셈을 구하는 문제이다.

 느낀 점

크게 어렵진 않으나 행렬 연산을 줄이는 방법으로 '스트라센 알고리즘'이 있다. 추가적인 공부가 필요할 것 같다.

 코드

#include <iostream>

using namespace std;

int n, m, k;
int m1[101][101];
int m2[101][101];
int m3[101][101];

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);

	cin >> n >> m;
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m;j++) {
			cin >> m1[i][j];
		}
	}

	cin >> m >> k;
	for (int i = 0; i < m; i++) {
		for (int j = 0; j < k;j++) {
			cin >> m2[i][j];
		}
	}

	for (int i = 0; i < n;i++) {
		for (int j = 0; j < k;j++) {
			for (int x = 0; x < m;x++) {
				m3[i][j] += m1[i][x] * m2[x][j];
			}
		}
	}

	for (int i = 0; i < n;i++) {
		for (int j = 0; j < k;j++) {
			cout << m3[i][j] << " ";
		}
		cout << "\n";
	}
}

댓글