[프로그래머스] 행렬의 곱셈 [연습문제] [python] level2

 

문제 설명

2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.

제한 조건

  • 행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
  • 행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.
  • 곱할 수 있는 배열만 주어집니다.

입출력 예

arr1                                                                arr2                                                              return

[[1, 4], [3, 2], [4, 1]] [[3, 3], [3, 3]] [[15, 15], [15, 15], [15, 15]]
[[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]]

 

설계 및 구현

 

접근 방법

 

지문의 설명 대로 주어진 행렬의 곱셈을 반환하여 해결 할 수 있는 문제이다.

행렬 A와 B로 곱셈을 한 결과가 res라고 한다고하면

res는 A의 열의갯수와 B의 행의 갯수를 가지게 된다.

 

 

my_solution

def solution(arr1, arr2):
    answer = []
    
    for i in range(len(arr1)):
        row = []
        for k in range(len(arr2[0])):
            mul_num = 0
            for j in range(len(arr1[i])):
                mul_num += arr1[i][j]*arr2[j][k]
            row.append(mul_num)
        answer.append(row)
    return answer

1. arr1의 열의 갯수와 B의 행의 갯수까지 반복문을 돌린다.

2. arr1[i][j] * arr2[j][k]를 연산하여 mul_num에 저장한다.    => answer의 한개의 요소를 구함

3. arr[i]의 길이 만큼 돌려서 한개의 row를 구성한 후 answer에 추가한다.

4. 모든 반복문을 탈출한뒤 결과값이 담긴 answer을 반환한다.

 

 

다른 분의 solution

def solution(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]

열로 들어 있는 요소를 찢어서 행별로 다시 만드는 코드라고 한다.

아무리 봐도 난 이해가 어려운 코드...

 

반응형

+ Recent posts