본문 바로가기
Algorithm

[프로그래머스] 행렬의 곱 파이썬

by YGSEO 2021. 3. 16.
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

댓글