[백준 2740] https://www.acmicpc.net/problem/2740
NXM 행렬 A와 MXK 행렬 B를 곱해서 NXK 행렬을 만드는 곱셈식을 구현할 것이다. 행렬에 대해서 배우면 알겠지만, A의 행과 B의 열을 곱해서 새로운 행렬의 행을 구성하기 때문에 이 점을 유의해서 코드를 구현하면 된다.
예제를 보면, 3X2 행렬과 2X3 행렬을 곱해서 3X3행렬이 출력되는 것을 볼 수 있다.
- vector STL로 2차원 배열을 선언해서 2개의 행렬 A,B의 곱셈을 연산할 것이다.
- A의 행 x B의 열을 곱하는 것을 구현할 것이다.
#include <iostream>
#include <vector>
using namespace std;
int main(void){
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N,M,K;
cin>>N>>M;
vector<vector<int>> A(N,vector<int>(M,0)); // 2차원 배열로 NxM 행렬 A 선언
for(int i=0;i<N;i++){
for(int j=0;j<M;j++){
cin>>A[i][j];
}
}
cin>>M>>K;
vector<vector<int>> B(M,vector<int>(K,0)); // 2차원 배열로 MxK 행렬 B 선언
for(int i=0;i<M;i++){
for(int j=0;j<K;j++){
cin>>B[i][j];
}
}
for(int i=0;i<N;i++){
for(int j=0;j<K;j++){ // 결과는 NxK 행렬이기 때문에
int sum=0;
for(int k=0;k<M;k++){
sum+=A[i][k]*B[k][j];
}
cout<<sum<<" ";
// A의 행과 B의 열을 곱해서 sum에 저장한 뒤 NxK 행렬에 sum을 출력
}
cout<<"\n";
}
return 0;
}