[c/c++] 백준 2740(Silver 5)

은동·2023년 1월 14일
0

Baekjoon

목록 보기
2/49

🔨 문제

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

<요약>
NxM크기의 행렬 A와 MxK크기의 행렬 B가 주어졌을 때, 두 행렬을 곱하는 프로그램을 작성하시오.

🔨 해결방법

  1. 행렬 문제이므로 이차원 배열 이용
  2. NxM 크기의 이차원 배열과 MxK 크기의 이차원 배열을 입력 받음
  3. for문 3개와 행렬곱 공식을 이용하여 NxK크기의 배열을 생성

❗️ 여기서 핵심은 행렬 곱을 어떻게 3중 for문으로 구현하냐는 건데, 나는 'NxM 행렬'의 행과 'MxK 행렬'의 열만 제외하면 나머지는 같은 값으로 움직이기 때문에 for문의 구조를 아래와 같이 했다.

	for (int i = 0; i < n; i++) {
		for (int j = 0; j < k; j++) {
			int result = 0;
			for (int s = 0; s < m; s++) {
				result += arr[i][s] * brr[s][j];
			}
			cout << result << ' ';
		}
		cout << '\n';
	}	

🔨 코드

#include <iostream>
using namespace std;

int main(void) {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int n, m, k;
	cin >> n >> m;
	int arr[101][101] = { 0 }, brr[101][101] = { 0 };
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			cin >> arr[i][j];
		}
	}
	cin >> m >> k;
	for (int i = 0; i < m; i++) {
		for (int j = 0; j < k; j++) {
			cin >> brr[i][j];
		}
	}
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < k; j++) {
			int result = 0;
			for (int s = 0; s < m; s++) {
				result += arr[i][s] * brr[s][j];
			}
			cout << result << ' ';
		}
		cout << '\n';
	}	

	return 0;
}
profile
자자 선수입장~

0개의 댓글