규도자 개발 블로그
[프로그래머스/Level2/파이썬3(python3)] 행렬의 곱셈 본문
[프로그래머스/Level2/파이썬3(python3)] 행렬의 곱셈
문제
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]] |
풀이
def solution(arr1, arr2):
x = len(arr2[0])
y = len(arr1)
answer = []
for i in range(y):
x_list = []
for j in range(x):
number = 0
for k in range(len(arr1[0])):
nf1 = arr1[i][k]
nf2 = arr2[k][j]
number += nf1 * nf2
x_list.append(number)
answer.append(x_list)
return answer
설명
일단 이 문제를 풀기 위해선 행렬과 행렬의 곱셈에 대해서 알아야 한다. 행렬은 컴퓨터에서 쓰이는 list가 아니라 수학 개념 중 하나이다. 수 또는 다항식 등을 직사각형 모양으로 배열한 것을 행렬이라고 하는데 또 이를 곱하는 것에는 행렬의 곱셈이라는 특수한 방식이 요구된다.
이러한 형태로 정의할 수 있다. 이곳을 참고하면 쉽게 이해할 수 있을 것이다. 오히려 코드로 이해하는 게 개발자들에겐 좀 더 직관적인 방법일 수도 있다는 생각이 든다. 완성된 행렬의 x(열)의 길이는 arr2의 열 길이이고, 완성된 행렬의 y(행)의 길이는 arr1의 행 길이이다. 그런고로 행렬의 곱셈을 완성하기 위해선 arr1의 열길이와 arr2의 행길이가 일치해야 한다. 행렬을 곱하는 공식을 for문을 이용하여 간단하게 구현했다.
'알고리즘 > 풀이' 카테고리의 다른 글
[프로그래머스/Level2/파이썬3(python3)] 괄호 변환 (0) | 2021.03.30 |
---|---|
[프로그래머스/Level2/파이썬3(python3)] 전화번호 목록 (0) | 2021.03.28 |
[프로그래머스/Level2/파이썬3(python3)] 피보나치 수 (0) | 2021.03.22 |
[프로그래머스/Level2/파이썬3(python3)] 최댓값과 최솟값 (0) | 2021.03.20 |
[프로그래머스/Level2/파이썬3(python3)] 조이스틱 (0) | 2021.03.20 |
Comments