# A 행렬을 선언합니다.
N, A_M = map(int, input().split())
A = []
for _ in range(N):
    A.append(list(map(int, input().split())))
    
# B 행렬을 선언합니다.
B_M, K = map(int, input().split())
B = []
for _ in range(B_M):
    B.append(list(map(int, input().split())))
    
result = []

# A에서 각 row에 해당하는 list를 가져옵니다.
for A_subset in A:
    # A_subset row의 n 번째 원소는 B의 n 번째 col과 곱해집니다.
    # 곱한 후, 더해주면 결과 행렬의 n 번째 row가 만들어집니다.
    # 이를 위해 열 갯수만큼의 B_subset을 만듭니다.
    B_subset = [0] * K
    # A_subset의 col 갯수만큼 for-loop가 반복됩니다.
    for i, ele in enumerate(A_subset):
        # A_subset row의 i 번째 숫자와 B의 i 번째 행에 해당하는 수를 곱합니다.
        # 숫자와 행을 바로 곱하는 작업은 선형 조합(맞나?)를 생각해보면 쉽습니다.
        target_subset = [ele * num for num in B[i]]
        # B_subset에 전부 더해주면 끝
        B_subset = [sum(x) for x in zip(B_subset, target_subset)]
    result.append(B_subset)
    
for row in result:
    print(*row)

이 문제는 행렬곱만 알고 있다면, 3중 for-loop로 쉽게 해결할 수 있다.

'# 코딩 문제 관련 > 파이썬' 카테고리의 다른 글

백준 2749번(python)  (0) 2020.07.12
백준 10830번(python)  (0) 2020.07.11
백준 11401번(python)  (0) 2020.06.05
백준 1629번(python)  (0) 2020.05.04
백준 1780번(python)  (0) 2020.05.04