파이썬 문제풀이

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

냄비짱 2023. 8. 7. 01:08
728x90

📌문제 출처

백준 단계별 문제풀이 - 분할정복
https://www.acmicpc.net/problem/2740

❓ 문제

❗ 풀이

  • 행렬 전환하여 행렬 곱 연산 진행

📗 풀이 코드

import sys
input = sys.stdin.readline

n,m = map(int,input().split())
list_a = [list(map(int,input().split())) for _ in range(n)]
_,k = map(int,input().split()) # 행렬 곱셈이 가능하려면 a의 열과 b의 행이 같아야하기에 m 생략
list_b = [[] for _ in range(k)]
for _ in range(m):
    for i,num in enumerate(map(int,input().split())): # 각 행에 대해 행렬 전환
        list_b[i].append(num)
for i in range(n): # a의 행 하나씩 출력
    row = [] # 각 행의 연산 결과를 담아둘 리스트
    for j in range(k): # b의 행(실제는 열) 하나씩 출력
        row.append(sum([a*b for a,b in zip(list_a[i],list_b[j])])) # 행렬 곱 결과 하나씩 행에 담기
    print(*row)

📗 코드 해설

  • 행렬 곱 연산을 쉽게 하기 위해 두번째 행렬 input을 받을 때 행렬전환을 시켜준다.
  • 이후 하나의 행씩 연산을 진행
  • 곱 연산으로 하나의 행이 만들어질 때마다 출력