궤도

[백준] 2740번 : 행렬 곱셈 본문

💻 현생/⛓ 알고리즘

[백준] 2740번 : 행렬 곱셈

영이오 2021. 3. 30. 15:06

문제

 


풀이

 

시도때도 없이 바뀌는 교육정책과 교육과정에서 손해를 보는건 결국 학생들인데...

그런 학생들 중에서는 행렬을 배우지 못한 나같은 사람도 있다. 우리 학년부터 행렬을 배우지 않았다고 말하면 내 나이가 들통나겠지만 뭐...별로 신경쓰지 않겠다.

 

아무튼 행렬을 배우지 않은 나는 행렬의 곱셈 문제가 나올 때마다 구글링을 해야하는 처지가 됐는데...

행렬의 곱셈을 정리하면 이렇게 된다.

행렬 A와 B를 곱할때 A 행렬은 행을 기준으로 나누고, B 행렬은 열을 기준으로 나눈다.

그리고 각 행과 열에 맞춰 곱하고 더하면 된다...

 

인터넷엔 행렬을 배운 훌륭한 선생님들이 많으니 그 분들을 찾아가는게 나을 것 같다.


소스코드

 

#include <iostream>

using namespace std;

int matrixA[100][100];
int matrixB[100][100];
int result[100][100];

int main() {
    int N, M, K;

    cin >> N >> M;
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < M; j++)
            cin >> matrixA[i][j];
    }

    cin >> M >> K;
    for (int i = 0; i < M; i++) {
        for (int j = 0; j < K; j++)
            cin >> matrixB[i][j];
    }

    for (int i = 0; i < N; i++) {
        for (int j = 0; j < K; j++) {
            for (int k = 0; k < M; k++) {
                result[i][j] += (matrixA[i][k] * matrixB[k][j]);
            }
        }
    }

    for (int i = 0; i < N; i++) {
        for (int j = 0; j < K; j++)
            cout << result[i][j] << ' ';
        cout << '\n';
    }
}

그래서 소스코드는 이렇게 간단하다.

사실 이 문제는 다음 문제를 위한 빌드업이었다.

Comments