[프로그래머스/Lv2] 행렬의 곱셈

2022. 10. 27. 12:17

문제

2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수를 만들어야 한다.

 

 

제한사항

1. 행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하이다.

2. 행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수이다.

3. 곱할 수 있는 배열만 주어진다.

 

 

코드

def solution(arr1, arr2):
    arr2_T = list(zip(*arr2))
    
    answer = []
    for s_arr1 in arr1:
        result_arr = []
        for s_arr2 in arr2_T:
            sum = 0
            for i in range(len(arr2)):
                sum += s_arr1[i] * s_arr2[i]
            result_arr.append(sum)
        answer.append(result_arr)
    
    return answer

 

 

설명

학교에서 배운 행렬의 곱을 그대로 코드로 옮기면 된다.

좀 더 간단하게 하기 위해 arr2를 전치해서 사용했다.

 

arr2_T = list(zip(*arr2))

arr2_T는 arr2의 전치행렬

 

answer = []

반환될 결과 행렬

 

for s_arr1 in arr1:

arr1의 원소들을 하나씩 꺼내어 반복

 

result_arr = []

한 줄 연산이 끝나면 결과를 저장할 배열

 

for s_arr2 in arr2_T:

arr2_T의 원소들을 하나씩 꺼내어 반복

 

sum = 0

행렬의 곱을 저장해놓을 변수

 

for i in range(len(arr2)):
	sum += s_arr1[i] * s_arr2[i]

행렬의 곱을 수행하는 코드

전치행렬을 통해 i 하나로 코드가 간단하게 짜짐.

 

result_arr.append(sum)

반복이 끝나면 result_arr에 sum을 저장

 

answer.append(result_arr)

가장 바깥쪽 반복문이 끝날때마다 answer에 result_arr를 저장

 

return answer

반복문이 모두 종료되면 answer를 반환

BELATED ARTICLES

more