문제/백준_파이썬

169. 2740(행렬곱셈) - 파이썬

sm_hope 2022. 8. 2. 21:08
import sys
input = sys.stdin.readline
N, M = map(int, input().split())

A = [list(map(int, input().split())) for _ in range(N)]

M, K = map(int, input().split())

B = [list(map(int, input().split())) for _ in range(M)]
result = [[0 for _ in range(K)] for _ in range(N)]

for n in range(N):
    for k in range(K):
        for m in range(M):
            result[n][k] += A[n][m] * B[m][k]

for i in result:
    print(*i)

문제요약

행렬 곱을 진행하라

설명

이 문제의 핵심은 아래와 같다.

N*M 행렬과  M*K 행렬을 곱하면 N*K행렬이 나온다.

숫자가 작기 때문에 크게 어렵게 생각할 것 없이 행렬곱 식을 그대로 사용하면 된다.

 

따라서 

for n in range(N):
    for k in range(K):
        for m in range(M):
            result[n][k] += A[n][m] * B[m][k]

다음과 같은 식이 나오게 된 것이다.