파이썬으로 두 행렬 곱하기 구현하는 방법

1. 문제

 

2740번: 행렬 곱셈 (acmicpc.net)

 

2740번: 행렬 곱셈

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

www.acmicpc.net

 

2. 풀이

 

n*m행렬과 m*k 행렬을 곱하면, n*k행렬이 되며,

 

n*k 행렬의 원소 $c_{ij}$는 다음과 같이 정의될 것이다

 

$$c_{ij} = \sum_{w = 0}^{k-1} a_{iw}b_{wj}$$

 

이차원 리스트를 적절히 정의하고, i,j,w의 3중 for문으로 행렬 곱셈을 만들 수 있다

 

from sys import stdin

n,m = map(int,stdin.readline().split())

A = [list(map(int,stdin.readline().split())) for _ in range(n)]

m,k = map(int,stdin.readline().split())

B = [list(map(int,stdin.readline().split())) for _ in range(m)]

C = [[0]*k for _ in range(n)]

for i in range(n):
    
    for j in range(k):
        
        for w in range(m):
            
            C[i][j] += A[i][w]*B[w][j]

for row in C:
    
    print(*row)
TAGS.

Comments