본문 바로가기

Baekjoon/C++

[C++][BOJ/백준] 2740 행렬 곱셈

 

 

Baekjoon Online Judge

 

클릭 시 문제로 이동

 

 

[문제]

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를 곱한 행렬을 출력한다. 행렬의 각 원소는 공백으로 구분한다.

 

 


 

[코드]

#include <iostream>
using namespace std;

int a[101][101], b[101][101], res[101][101];

void Input(int a, int b, int arr[][101])
{
    for (int i = 0; i < a; i++)
    {
        for (int j = 0; j < b; j++)
            cin >> arr[i][j];
    }
}

int main() 
{
    int n, m, k;

    cin >> n >> m;
    Input(n, m, a);

    cin >> m >> k;
    Input(m, k, b);

    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < k; j++)
        {
            for (int k = 0; k < m; k++)
                res[i][j] += a[i][k] * b[k][j];

            cout << res[i][j] << " ";
        }

        cout << '\n';
    }

    return 0;
}