728x90
반응형
『목차』
0. 개요
1. 문제
2. 풀이
3. 코드
0. 개요
수학, 구현, 선형대수학 문제. 행렬곱의 원리에 대해 알고있어야만 풀 수 있는 문제이다.
1. 문제
https://www.acmicpc.net/problem/2740
2740번: 행렬 곱셈
첫째 줄에 행렬 A의 크기 N 과 M이 주어진다. 둘째 줄부터 N개의 줄에 행렬 A의 원소 M개가 순서대로 주어진다. 그 다음 줄에는 행렬 B의 크기 M과 K가 주어진다. 이어서 M개의 줄에 행렬 B의 원소 K개
www.acmicpc.net
[문제]
N*M크기의 행렬 A와 M*K크기의 행렬 B가 주어졌을 때, 두 행렬을 곱하는 프로그램을 작성하시오.
[입력]
첫째 줄에 행렬 A의 크기 N 과 M이 주어진다. 둘째 줄부터 N개의 줄에 행렬 A의 원소 M개가 순서대로 주어진다. 그 다음 줄에는 행렬 B의 크기 M과 K가 주어진다. 이어서 M개의 줄에 행렬 B의 원소 K개가 차례대로 주어진다. N과 M, 그리고 K는 100보다 작거나 같고, 행렬의 원소는 절댓값이 100보다 작거나 같은 정수이다.
[출력]
첫째 줄부터 N개의 줄에 행렬 A와 B를 곱한 행렬을 출력한다. 행렬의 각 원소는 공백으로 구분한다.
[예제 입력 1]
3 2
1 2
3 4
5 6
2 3
-1 -2 0
0 0 3
[예제 출력 1]
-1 -2 6
-3 -6 12
-5 -10 18
반응형
2. 풀이
![[Baekjoon/백준][2740][C/C++] 행렬 곱셈](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
행렬곱의 원리는 위와 같다. 3중 for문을 통해 NxM 행렬과 MxK 행렬의 연산을 진행할 수 있다.
3. 코드
#include <iostream>
using namespace std;
int mat1[100][100] = {};
int mat2[100][100] = {};
int main(int argc, char* argv[]) {
/* Faster */
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
/* Init */
int n, m, k;
/* Mat1 */
cin >> n >> m;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
cin >> mat1[i][j];
/* Mat2 */
cin >> m >> k;
for (int i = 0; i < m; i++)
for (int j = 0; j < k; j++)
cin >> mat2[i][j];
/* Output */
for (int _n = 0; _n < n; _n++) {
for (int _k = 0; _k < k; _k++) {
int mul = 0;
for (int _m = 0; _m < m; _m++)
mul += mat1[_n][_m] * mat2[_m][_k];
cout << mul << ' ';
}
cout << '\n';
}
/* Return */
return 0;
}
728x90
반응형
'⌨️CS-PS > 백준_수학&구현' 카테고리의 다른 글
[Baekjoon/백준][1929][C/C++] 소수 구하기 (0) | 2023.05.03 |
---|---|
[Baekjoon/백준][25314][C/C++] 코딩은 체육과목입니다 (0) | 2023.05.02 |
[Baekjoon/백준][11382][C/C++] 꼬마 정민 (0) | 2023.05.02 |
[Baekjoon/백준][4344][C/C++] 평균은 넘겠지 (0) | 2023.02.07 |
[Baekjoon/백준][3052][C/C++] 나머지 (0) | 2023.01.31 |