Odds and Ends

프로그래머스 : 행렬의 곱셈 [파이썬] 본문

코딩 테스트

프로그래머스 : 행렬의 곱셈 [파이썬]

Squidward 2022. 9. 24. 00:04

문제 설명

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

 

[문제 풀이]

1) A행 수 * B열 수  가 행렬 곱셈 결과이기 때문에 앞 두개의 포문을 에이행, 비열로 배치한다.

2) 세번째 포문은 A의 행으로 배치한다. B의 열을 곱하는 순서가 B의 행만큼 진행되기 때문이다.

3) 더한 sum 값을 temp 배열에 넣어준다. + 썸 초기화

4) 배열이 완성되면 temp를 answer 배열에 넣어준다. + temp 초기화

def solution(arr1, arr2):
    answer = []
    sum = 0
    temp = []

    # 행렬곱 결과 배열은 N(arr1의 행)*M(arr2의 열)이다.
    for i in range(len(arr1)):
        for k in range(len(arr2[0])):
            for j in range(len(arr2)):
                sum = sum + arr1[i][j] * arr2[j][k]
            temp.append(sum)
            sum=0
        answer.append(temp)
        temp = []
    return answer
    ** 행렬곱셈 개념을 적용해야해서 좀 어려웠다.
728x90