[백준 BOJ_2740] 행렬 곱셈 Python 풀이

출처: 백준 온라인 저지

문제Permalink

BOJ_2740_1
BOJ_2740_2

풀이Permalink

이 문제는 분할정복으로 해결이 가능하지만 N과 M의 크기가 100으로 제한되어 있기 때문에 슈트라센 알고리즘보다 3중 for loop를 쓰는 것이 더 효율적이게 됩니다. 행렬의 거듭제곱 문제를 위해 푸는 선행문제라고 봐도 되기 때문에 단순히 행렬의 곱셈을 계산해주면 됩니다.

코드Permalink

def multiply(a, b, c):
    for n in range(N):
        for k in range(K):
            for m in range(M):
                c[n][k] += a[n][m]*b[m][k]
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)]
C = [[0] * K for _ in range(N)]
multiply(A, B, C)
for c in C:
    print(*c, sep=" ")

Leave a comment