이 문제는 어렵지는 않았지만 살짝 귀찮은 문제였다. 나는 당연히 무식하게 for 돌려서 풀었다.
import sys
n,m = map(int, sys.stdin.readline().split())
a = []
for _ in range(n):
a.append(list(map(int,sys.stdin.readline().split())))
n2,m2 = map(int, sys.stdin.readline().split())
b=[]
for _ in range(n2):
b.append(list(map(int,sys.stdin.readline().split())))
final = []
for i in range(n):
t = a[i]
total = []
for j in range(m2):
tmp = []
t = 0
for row in range(n2):
tmp.append(b[row][j])
for n in range(n2):
t+= a[i][n] * tmp[n]
total.append(t)
final.append(total)
for i in final:
for j in i:
print(j,end=' ')
print()
답은 맞았지만 문제의 의도가 이렇게 푸는게 맞는지 다른 고수의 코드를 구경하러 갔다.
그랬더니 미리 배열을 구해서 풀었더니 훨씬 코드가 깔끔하게 떨어지는것을 볼 수 있었다.
그래서 나도 코드를 수정했다.
import sys
n,m = map(int, sys.stdin.readline().split())
a = []
for _ in range(n):
a.append(list(map(int,sys.stdin.readline().split())))
n2,m2 = map(int, sys.stdin.readline().split())
b=[]
for _ in range(n2):
b.append(list(map(int,sys.stdin.readline().split())))
final = [[0 for i in range(m2)] for i in range(n)]
for i in range(n):
for j in range(m2):
for n in range(m):
final[i][j] += a[i][n] * b[n][j]
for i in final:
for j in i:
print(j,end=' ')
print()
'알고리즘' 카테고리의 다른 글
백준 11444 풀이 (피보나치 수 6, 분할 정복, 행렬 제곱) (0) | 2021.03.17 |
---|---|
백준 10830 풀이 (행렬 제곱, 분할 정복, 거듭제곱) (0) | 2021.03.16 |
백준 11401 풀이 (이항 계수 3, 페르마의 소정리, 정수론, 분할알고리즘) (0) | 2021.03.15 |
#4 알고리즘 공부 3/12 리뷰 (0) | 2021.03.12 |
백준 1629 풀이 (곱셈, 분할정복, 파이썬) (0) | 2021.03.12 |