[PYTHON/파이썬] Level2 행렬의 곱셈 - 3중 for문 / zip

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

     

    프로그래머스

    코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

    programmers.co.kr

     

    안녕하세요 맨덕입니다.

    오늘은 프로그래머스에서 행렬의 곱셈을 풀어봤습니다.

    오랜만에 행렬의 곱셈을 하려다보니 제가 푸는 방식이 맞는지 헷갈렸습니다.. : )

    그래서 행렬의 곱셈의 공식부터 정리하겠습니다.

    행렬의 곱셈

    위키백과 - 행렬의 곱셈

    문제풀이

    • 원소 하나씩 인덱스로 접근하여 계산합니다.

    solution - 성공

    def solution(arr1,arr2):
        # [[0, 0], [0, 0], [0, 0]]
        result = [[0]*len(arr2[0]) for _ in range(len(arr1))]
    
        for i in range(len(arr1)):
            for j in range(len(arr2[0])):
                for k in range(len(arr1[0])):
                    result[i][j] += arr1[i][k] * arr2[k][j]
        return result

    다른 사람 풀이 - zip

    def productMatrix(A, B):
        return [[sum(a*b for a, b in zip(A_row,B_col)) for B_col in zip(*B)] for A_row in A]
    • zip으로 B의 행렬을 행과 열을 바꾼다.
    • A의 행(a,b)과 행과 열을 바꾼 B 행렬의 행(c,d)을 계산하고 리스트에 저장한다.
    • ac + bd

    [출처] - 위키백과/행렬의 곱셈 https://ko.wikipedia.org/wiki/%ED%96%89%EB%A0%AC_%EA%B3%B1%EC%85%88

    댓글