https://www.acmicpc.net/problem/2740
행렬의 곱셈을 코드로 구현하면 되는 문제
행렬 곱셈을 하기 위해선 조건부터 알아야 합니다.
행렬 A와 행렬 B를 곱할 때 A의 열 개수와 B의 행 개수가 같아야 합니다.
즉, A가 n×m 행렬이고 B가 m×k 행렬이면 곱셈이 가능합니다.
그러면 결과 행렬 C는 n×k 크기를 갖게 됩니다.
결과 행렬 C의 원소 C[i][j]는 A[i][0] × B[0][j] + A[i][1] × B[1][j] + ... + A[i][k-1] × B[k-1][j] 가 됩니다.
이제 구현해볼게요.
문제에서 제시한 입력문부터 구현해줍니다.
n,m = map(int,input().split())
A = [list(map(int,input().split())) for _ in range(n)] # n×m 행렬
m,k = map(int,input().split())
B = [list(map(int,input().split())) for _ in range(m)] # m×k 행렬
결과를 저장할 배열을 선언(위 조건에 맞게 n×k 크기의 배열 선언)
res = [[0] * k for _ in range(n)] # 결과를 저장할 배열
행렬 곱을 구현해줍니다.
for i in range(n): # res의 행(A의 행)
for j in range(k): # res의 열(B의 열)
for x in range(m): # A의 열 = B의 행
res[i][j] += A[i][x] * B[x][j]
하나씩 출력하면 완성 ☺️
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)]
res = [[0] * k for _ in range(n)] # 결과를 저장할 배열
for i in range(n):
for j in range(k):
for x in range(m):
res[i][j] += A[i][x] * B[x][j]
for row in res:
print(*row)