본문 바로가기
알고리즘/백준

백준 2740번 (행렬 곱셈) c++

by Jo_Wick 2022. 12. 25.

문제

문제 풀이

행렬 곱셈을 할 줄 안다면 정말 쉽게 풀 수 있다.

행렬 곱셈은 기본적으로 왼쪽 행렬의 행과 오른쪽 행렬의 열을 곱하고 더하는 것이다.

그래서

1행 1열 = 1행 X 1열     1행 2열 = 1행 X 2열

2행 1열 = 2행 X 1열     2행 2열 = 2행 X 2열

이런식으로 계산한다.

 

예제를 직접 손으로 풀어본다면

이러한 형태가 된다.

 

이러한 풀이방식 그대로 코딩을 하면 된다.

 

 

전체 코드

#include <bits/stdc++.h>

using namespace std;

int main(){

        ios_base::sync_with_stdio(false);
        cin.tie(0);

        int N, M, K;

        int input_1[101][101] = {0,};
        int input_2[101][101] = {0,};

        cin >> N >> M;

        for(register int i = 1; i <= N; i++){

                for(register int j = 1; j <= M; j++){
                        cin >> input_1[i][j];
                }

        }

        cin >> M >> K;

        for(register int i = 1; i <= M; i++){

                for(register int j = 1; j <= K; j++){
                        cin >> input_2[i][j];
                }

        }

        int result[101][101] = {0,};

        for(register int i = 1; i <= N; i++){

                for(register int j = 1; j <= K; j++){

                        for(register int k = 1; k <= M; k++){
                                result[i][j] += input_1[i][k] * input_2[k][j];
                        }

                        cout << result[i][j] << ' ';

                }

                cout << '\n';

        }


        return 0;

}

'알고리즘 > 백준' 카테고리의 다른 글

백준 11723번 (집합) c++  (0) 2023.02.15
백준 9655번 (돌 게임) c++  (0) 2022.12.27
백준 2581번 (소수) c++  (0) 2022.12.25
백준 1676번 (팩토리얼 0의 개수) c++  (0) 2022.12.25
백준 1427번 (소트인사이드) c++  (0) 2022.12.24

댓글