[C++] 백준 2740 - 행렬 곱셈

메르센고수·2023년 8월 7일
0

Baekjoon

목록 보기
6/48
post-thumbnail

문제 - 행렬 곱셈 (Silver 5)

[백준 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;
}

결과

profile
블로그 이전했습니다 (https://phj6724.tistory.com/)

0개의 댓글