본문 바로가기

문제 풀이/문제 풀이(BOJ)

[Silver V] 행렬 곱셈 - 2740

[문제 위치]

https://www.acmicpc.net/problem/2740

[문제 풀이]

#include <iostream>
#include <vector>

using namespace std;

#define fastio ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)

int main() {
    fastio;  // 빠른 입출력 설정

    int N, M, K;
    cin >> N >> M;

    // 행렬 A 입력
    vector<vector<int>> A(N, vector<int>(M));
    for (int i = 0; i < N; ++i) {
        for (int j = 0; j < M; ++j) {
            cin >> A[i][j];
        }
    }

    cin >> M >> K;  // M은 이미 입력받았지만 다시 받아서 확인
    // 행렬 B 입력
    vector<vector<int>> B(M, vector<int>(K));
    for (int i = 0; i < M; ++i) {
        for (int j = 0; j < K; ++j) {
            cin >> B[i][j];
        }
    }

    // 결과 행렬 C 초기화
    vector<vector<int>> C(N, vector<int>(K, 0));

    // 행렬 곱셈 수행
    for (int i = 0; i < N; ++i) {
        for (int j = 0; j < K; ++j) {
            for (int k = 0; k < M; ++k) {
                C[i][j] += A[i][k] * B[k][j];
            }
        }
    }

    // 결과 출력
    for (int i = 0; i < N; ++i) {
        for (int j = 0; j < K; ++j) {
            cout << C[i][j] << " ";
        }
        cout << "\n";
    }

    return 0;
}