문제
https://www.acmicpc.net/problem/2740
- 문제
N*M크기의 행렬 A와 M*K크기의 행렬 B가 주어졌을 때, 두 행렬을 곱하는 프로그램을 작성하시오. - 입력
첫째 줄에 행렬 A의 크기 N 과 M이 주어진다. 둘째 줄부터 N개의 줄에 행렬 A의 원소 M개가 순서대로 주어진다. 그 다음 줄에는 행렬 B의 크기 M과 K가 주어진다. 이어서 M개의 줄에 행렬 B의 원소 K개가 차례대로 주어진다. N과 M, 그리고 K는 100보다 작거나 같고, 행렬의 원소는 절댓값이 100보다 작거나 같은 정수이다. - 출력
첫째 줄부터 N개의 줄에 행렬 A와 B를 곱한 행렬을 출력한다. 행렬의 각 원소는 공백으로 구분한다.
풀이
아무 생각 없이 행렬곱? numpy?라는 덜떨어진 생각으로 아래와 같이 무식한 코드를 작성하였다.
import numpy
n, m = map(int, input().split())
a = []
for _ in range(n):
a.append(list(map(int, input().split())))
a = numpy.array(a)
n, m = map(int, input().split())
b = []
for _ in range(n):
b.append(list(map(int, input().split())))
b = numpy.array(b)
for i in a@b:
print(*i)
물론 반겨준 건 런타임 에러
2740 | 런타임 에러 (ModuleNotFoundError) |
넘파이 없이 직접 코드를 작성하였다.
n, m = map(int, input().split())
a = []
for _ in range(n):
a.append(list(map(int, input().split())))
m, k = map(int, input().split())
b = []
for _ in range(m):
b.append(list(map(int, input().split())))
ans = [[0 for _ in range(k)] for _ in range(n)]
for N in range(n):
for M in range(m):
for K in range(k):
ans[N][K] += a[N][M] * b[M][K]
for i in ans:
print(*i)