본문 바로가기

Baekjoon

[Baekjoon]백준 2740 행렬 곱셈(실버 5) - Python, C++

문제설명

문제를 살펴보면 그냥 단순하게 두 행렬을 입력받아 곱한 결과를 출력하는 문제이다

행렬의 곱을 알고있다면 알겠지만, 두 행렬을 곱하려면 앞 행렬의 열의 개수와 뒤 행렬의 행의 개수가 같아야한다

그리고 그 곱의 결과 행렬은 앞 행렬의 행의 크기가 행의 개수, 뒤 행렬의 열의 크기가 열의 개수가 된다

즉, 3 x 2 , 2 x 4의 행렬의 결과는 3 x 4 행렬이 된다는 것이다 이 점을 참고하여 행렬의 값을 저장하는 

리스트를 0으로 초기화하여 만들어주었고, for문을 통해 각 곱을 계산하고 더해주었다

문제 자체는 쉽지만, 행렬의 곱 자체가 실수하기 쉽기 때문에 따로 그려가며 index를 확인하며 작성하였다

결과는 언패킹을 사용하여 간단하게 출력하였다

A = []
row_size_A, col_size_A = map(int, input().split())
for _ in range(row_size_A):
    A.append(list(map(int, input().split())))
    
B = []
row_size_B, col_size_B = map(int, input().split())
for _ in range(row_size_B):
    B.append(list(map(int, input().split())))
    
result = [[0 for _ in range(col_size_B)] for _ in range(row_size_A)]
for i in range(row_size_A):
    for j in range(col_size_B):
        for k in range(col_size_A):
            result[i][j] += A[i][k] * B[k][j]

for i in result:
    print(*i)

현재 C++을 연습하고 있어서 이 코드를 그대로 사용하여 C++로 작성해보았다

#include <iostream>
#include <vector>
using namespace std;

int main() {
    int row_size_A, col_size_A;
    cin >> row_size_A >> col_size_A;

    // 첫 번째 행렬 입력
    vector<vector<int>> A(row_size_A, vector<int>(col_size_A));
    for (int i = 0; i < row_size_A; i++) {
        for (int j = 0; j < col_size_A; j++) {
            cin >> A[i][j];
        }
    }

    int row_size_B, col_size_B;
    cin >> row_size_B >> col_size_B;

    // 두 번째 행렬 입력
    vector<vector<int>> B(row_size_B, vector<int>(col_size_B));
    for (int i = 0; i < row_size_B; i++) {
        for (int j = 0; j < col_size_B; j++) {
            cin >> B[i][j];
        }
    }

    // 결과값 저장 
    vector<vector<int>> result(row_size_A, vector<int>(col_size_B, 0));
    for (int i = 0; i < row_size_A; i++) {
        for (int j = 0; j < col_size_B; j++) {
            for (int k = 0; k < col_size_A; k++) {
                result[i][j] += A[i][k] * B[k][j];
            }
        }
    }

    // 결과 출력
    for (int i = 0; i < row_size_A; i++) {
        for (int j = 0; j < col_size_B; j++) {
            cout << result[i][j] << " ";
        }
        cout << endl;
    }

    return 0;
}