EXCELSIOR

[Level2] 행렬의 곱셈 (ProdcutMatrix) 본문

Python/알고리즘_문제

[Level2] 행렬의 곱셈 (ProdcutMatrix)

Excelsior-JH 2016. 12. 6. 19:46

1. 문제

행렬의 곱셈은, 곱하려는 두 행렬의 어떤 행과 열을 기준으로, 좌측의 행렬은 해당되는 행, 우측의 행렬은 해당되는 열을 순서대로 곱한 값을 더한 값이 들어갑니다. 행렬을 곱하기 위해선 좌측 행렬의 열의 개수와 우측 행렬의 행의 개수가 같아야 합니다. 곱할 수 있는 두 행렬 A,B가 주어질 때, 행렬을 곱한 값을 출력하는 productMatrix 함수를 완성해 보세요.


2. 풀이

1) 내가 작성한 코드

python의 numpy를 import 시켜 list인 A, B를 matrix로 변환한 뒤 return할 때 다시 tolist()를 이용하여 list형태로 return하였다.

import numpy as np
def productMatrix(A, B):
     
    return (np.matrix(A)*np.matrix(B)).tolist()
 
# 아래는 테스트로 출력해 보기 위한 코드입니다.
a = [ [ 1, 2 ], [ 2, 3 ]];
b = [[ 3, 4], [5, 6]];
print("결과 : {}".format(productMatrix(a,b)));


2) 다른 풀이

zip함수를 사용해서 풀었다.

def productMatrix(X, Y):
    answer = [[sum(a*b for a, b in zip(X_row,Y_col)) for Y_col in zip(*Y)] for X_row in X]
    return answer

# 아래는 테스트로 출력해 보기 위한 코드입니다.
a = [[ 1, 2], [2, 3]];
b = [[ 3, 4], [5, 6]];
print("결과 : {}".format(productMatrix(a,b)));


'Python > 알고리즘_문제' 카테고리의 다른 글

[Level 3] 다음 큰 숫자  (0) 2017.10.11
[Level2] 괄호 확인하기  (0) 2017.09.21
[Level2] 2016년 (getDayName)  (0) 2016.11.27
[Level 2] 최솟값 만들기 (getMinSum)  (2) 2016.11.15
[Level 1] 약수의 합 (sumDivisor)  (0) 2016.11.14
Comments