728x90
def solution(a, b):
c = []
for i in range(0,len(a)): # row of a
temp=[]
for j in range(0,len(b[0])): # col of b
s = 0
for k in range(0,len(a[0])): # col of a or row of b
s += a[i][k]*b[k][j]
temp.append(s)
c.append(temp)
return c
a = b =
[1, 4] [3, 3]
[3, 2] [3, 3]
[4, 1]
matrix muliplication
answer를 list라고 선언했을때
answer[0][0] = (a[0][0] * b[0][0]) +
(a[0][1] * b[1][0])
.
.
.
answer[2][1] = (a[2][0] * b[0][1]) +
(a[2][1] * b[1][1])
으로 표현이 된다.
[i][j] 라고 생각하면
a에서는 col, b에서는 row값만 1씩 k만큼, 즉 a의 col개수 만큼 증가하는 것을 알 수 있다.
따라서
answer의 [i][j]는 a[i][k]*b[k][j] 로 k만큼 for loop이 도는 것이다.
k는 어차피 행렬의 곱에서 a의 col 혹은 b의 row 값 중 하나만 넣어도 성립이 된다. (둘은 반드시 같아야 하니까)
(a*b) dot (b*c) = (a*c)
728x90
'Algorithm' 카테고리의 다른 글
[프로그래머스] 짝지어 제거하기 파이썬 (stack, pop) (0) | 2021.03.16 |
---|---|
[프로그래머스] N개의 최소공배수 파이썬 (0) | 2021.03.16 |
[프로그래머스] 피보나치 수 파이썬 (0) | 2021.03.16 |
[프로그래머스] 숫자의 표현 파이썬 (0) | 2021.03.15 |
[프로그래머스] 땅따먹기 파이썬 (0) | 2021.03.15 |
댓글