Recent Posts
Notice
No Rules Rules
행렬 곱셈 (feat. 백준, 2740번) 본문
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
반응형
'생활 > 코테' 카테고리의 다른 글
최대 힙 (feat. 백준, 11279번) (0) | 2022.08.16 |
---|---|
행렬 제곱 (feat. 백준, 10830번) (0) | 2022.08.15 |
이항 계수 3 (feat. 백준, 11401번) (0) | 2022.08.15 |
곱셈 (feat. 백준, 1629번) (0) | 2022.08.15 |
종이의 개수 (feat. 백준, 1780번) (0) | 2022.08.14 |
Comments