백준 2740번 : 행렬 곱셈 / C++

2023. 3. 6. 20:49개인공부/코딩테스트

2740번: 행렬 곱셈 (acmicpc.net)

 

2740번: 행렬 곱셈

첫째 줄에 행렬 A의 크기 N 과 M이 주어진다. 둘째 줄부터 N개의 줄에 행렬 A의 원소 M개가 순서대로 주어진다. 그 다음 줄에는 행렬 B의 크기 M과 K가 주어진다. 이어서 M개의 줄에 행렬 B의 원소 K개

www.acmicpc.net

행렬의 곱셈에 대해서 처음으로 공부를 하였다. 행렬의 곱셈방법은 아직은 많이 어색하다. 그리고 행렬의 곱셈의 의미를 모르므로 차근차근 공부해야겠다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>
 
using namespace std;
 
int main()
{
    cin.tie(NULL);
    std::cout.tie(NULL);
    ios::sync_with_stdio(false);
 
    int N, M, K;
    cin >> N >> M;
    // A 행렬
    int* A = new int[N * M];
    for (int row = 0; row < N; ++row)
        for (int col = 0; col < M; ++col)
        {
            cin >> A[row * M + col];
        }
    // B 행렬
    cin >> M >> K;
    int* B = new int[M * K];
    for (int row = 0; row < M; ++row)
        for (int col = 0; col < K; ++col)
            cin >> B[row * K + col];
    // AB->C 행렬
    int* C = new int[N * K];
    for (int row = 0; row < N; ++row)
    {
        for (int col = 0; col < K; ++col)
        {
            C[row * K + col] = 0;
            for (int i = 0; i < M; ++i)
            {
                C[row * K + col] += A[row * M + i] * B[i * K + col];
            }
            
            cout << C[row * K + col] << ' ';
        }
        cout << '\n';
    }
 
    return 0;
}
 
cs