반응형
[ Contents ]
1. 문제 (링크 참조)
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()
반응형
'Algorithm' 카테고리의 다른 글
[수학/소수] 백준 1418 K-세준수 - 파이썬(Python) (0) | 2022.05.13 |
---|---|
[구현/수학] 백준 1434 책 정리 - 파이썬(Python) (0) | 2022.05.12 |
[분할정복/DQ] 백준 10830 행렬 제곱 - 파이썬(Python) (0) | 2022.05.10 |
[동적계획법/DP] 백준 12865 평범한 배낭 - 파이썬(Python) (0) | 2022.05.09 |
[분할정복/재귀] 백준 1629 곱셈 - 파이썬(Python) (0) | 2022.05.08 |
댓글