본문 바로가기
Algorithm

[구현/수학] 백준 2740 행렬 곱셈 - 파이썬(Python)

by jangThang 2022. 5. 11.
반응형

백준 온라인 저지

 

[ Contents ]

     

     

    1. 문제 (링크 참조)

     

    2740번: 행렬 곱셈

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

    www.acmicpc.net

     

     

     

    2. 문제 풀이

     두 행렬의 곱을 구하는 문제입니다.

     

     크기가 N*M인 A행렬과 크기가 M*K인 B행렬의 곱은 N*K입니다. 행렬의 곱은 A행렬의 열과 B행렬의 행이 같아야만 할 수 있고, 문제에서는 M이 고정이므로 이 점은 고려하지 않아도 됩니다.

     

    for i in range(N):
       for j in range(K):
            for z in range(M):
                # c11 = a11*b11 + a12*b21
                res[i][j] += mat1[i][z] * mat2[z][j]

     두 행렬의 곱은 3중 for문으로 구현할 수 있습니다.

     

     

     

    3. 코드

    import sys
    input = sys.stdin.readline
    
    # 입력
    N, M = map(int, input().split())
    matrixA = []
    for _ in range(N):
        matrixA.append(list(map(int, input().split())))
    
    M, K = map(int, input().split())
    matrixB = []
    for _ in range(M):
        matrixB.append(list(map(int, input().split())))
    
    # 행렬 곱셈
    def mul_matrix(mat1, mat2):
        res = [[0]*K for _ in range(N)]
        for i in range(N):
            for j in range(K):
                for z in range(M):
                    # c11 = a11*b11 + a12*b21
                    res[i][j] += mat1[i][z] * mat2[z][j]
        return res
    
    # 출력
    result = mul_matrix(matrixA, matrixB)
    for row in result:
        for col in row:
            print(col, end=" ")
        print()

     

     

    star가 되고나서 Tistory

    반응형

    댓글