[백준/파이썬] 2740번: 행렬 곱셈

수박강아지·2025년 2월 6일

BAEKJOON

목록 보기
49/174

문제

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)

0개의 댓글