chyam

[프로그래머스 Lv2, python]- 행렬의 곱셈 본문

프로그래머스/LV2

[프로그래머스 Lv2, python]- 행렬의 곱셈

chyam_eun 2025. 1. 8. 11:10

https://school.programmers.co.kr/learn/courses/30/lessons/12949

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

def mul(a,b,over,arr1,arr2):
    sum=0
    for i in range(over):
        sum+=arr1[a][i]*arr2[i][b] # 각각 곱해서 더해주기
    return sum

def solution(arr1, arr2): # a x b 행렬
    over=len(arr1[0]) # arr1의 열과 arr2의 행 길이
    row=len(arr1) # arr1의 행 길이
    col=len(arr2[0]) # arr2의 열 길이
    answer = [[0]*col for a in range(row)] # a x b 행렬 0으로 초기화해서 만들기
    for a in range(row):
        for b in range(col):
            answer[a][b]=mul(a,b,over,arr1,arr2) 
    return answer

처음풀이이다. 

zip을 이용하면 for문을 2개 사용하여 작성할 수 있다.


> zip함수

zip(*iterable)에서 *는 언패킹 연산자로, iterable의 요소를 하나씩 꺼내서 함수나 연산자에 전달한다. iterable은 반복 가능한 객체로, list,dic,set,tuple,range 등이 있다.

 

만약 matrix=[[1,2,3],[4,5,6],[7,8,9]]일때 zip(*matrix)을 사용하면, 각 행의 동일한 index요소들끼리 묶어서 [(1,4,7),(2,5,8),(3,6,9)]가 된다. => 행렬 곱셈에 유용하게 사용된다.

 

아래는 다른분의 풀이이다.

def mul(X,Y):
    return sum(x*y for x,y in zip(X,Y))

def solution(X, Y):
    answer = []
    for x_row in X:
        answer_row=[]
        for y_col in zip(*Y):
            answer_row.append(mul(x_row,y_col))
        answer.append(answer_row)
    return answer