프로그래머스 - 행렬의 곱셈**

dobyming·2023년 1월 24일
0

문제 설명

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

제한 조건

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

입출력 예

arr1arr2return
[[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]]

내 코드

def solution(arr1, arr2):
    x = len(arr1)
    y = len(arr2[0])
    answer = [[0]*y for _ in range(x)] # 행렬 사이즈 초기화 
    
    for i in range(len(arr1)): 
        for j in range(len(arr2[0])):
            for k in range(len(arr1[0])):
                answer[i][j] += arr1[i][k] * arr2[k][j]
    
    return answer

아이디어

  1. 행렬 사이즈
    행렬 곱셈의 공식을 활용하여 행렬 사이즈를 초기화한다. (arr1행 사이즈 x arr2열 사이즈)
  2. 행렬의 곱
    배열을 순차적으로 돌면서 누적한 값을 return한다. (삼중 for문 활용)

다른 사람 코드

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 함수로 A배열의 행 x B배열의 열 로 묶어 곱셈을 수행 후 sum 값을 리턴

  • 핵심 아이디어 = zip(*행렬이름)
    zip(*) 은 unpacking으로, 어떤 행렬을 뒤집고 싶을때 활용할 수 있다.

zip(*) 이란?

0개의 댓글