Today
Total
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
관리 메뉴

기억은 짧고 기록은 길다

[프로그래머스/Programmers] 행렬의 곱셈 - Python 본문

CodingTest/programmers

[프로그래머스/Programmers] 행렬의 곱셈 - Python

ukunV 2021. 9. 8. 17:24

Link

 

코딩테스트 연습 - 행렬의 곱셈

[[2, 3, 2], [4, 2, 4], [3, 1, 4]] [[5, 4, 3], [2, 4, 1], [3, 1, 1]] [[22, 22, 11], [36, 28, 18], [29, 20, 14]]

programmers.co.kr

 

Solution

해당 문제의 Solution에서는 가장 기본적이고 이해하기 쉬운 풀이 방법을 보여주고 있다.

하지만 Other Solution에서 zip()을 이용한 풀이가 매우 좋은 풀이라고 생각한다. zip()과 zip(*arr2)를 직접 돌려보면서 왜 저러한 코드로 해결되었고 어떤 과정을 거쳐 해결되는지 이해하고 지나가길 바란다.

def solution(arr1, arr2):
    r = len(arr1)
    c = len(arr2[0])

    answer = [[0] * c for _ in range(r)]

    for i in range(r):
        for j in range(c):
            for k in range(len(arr1[0])):
                answer[i][j] += arr1[i][k] * arr2[k][j]

    return answer
🔑 key point: answer[i][j] += arr1[i][k] * arr2[k][j]

 

Other Solution

def solution(arr1, arr2):
    return [[sum(a * b for a, b in zip(arr1_row, arr2_col)) for arr2_col in zip(*arr2)] for arr1_row in arr1]
🔑 key point: zip(), zip(*arr2)
Comments