sm 기술 블로그
169. 2740(행렬곱셈) - 파이썬 본문
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]
다음과 같은 식이 나오게 된 것이다.
'문제 > 백준_파이썬' 카테고리의 다른 글
171. 10830(피보나치 수 6) - 파이썬 (0) | 2022.08.05 |
---|---|
170. 10830(행렬 제곱) - 파이썬 (0) | 2022.08.04 |
168. 1629(이항계수3) - 파이썬 (0) | 2022.08.01 |
167. 1629(곱셈) - 파이썬 (0) | 2022.07.31 |
166. 1780(종이의 개수) - 파이썬 (0) | 2022.07.31 |
Comments