코딩 테스트 연습/프로그래머스
[Python]Programmers 행렬의 곱셈(lv2)
jaeheon0520
2024. 3. 18. 11:24
1. 문제

https://school.programmers.co.kr/learn/courses/30/lessons/12949
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
두 행렬이 주어줄 때 행렬의 곱을 출력하는 문제이다.
2. 풀이
문제를 풀이하기 전에 행렬의 곱에 대해 알아보자.
https://namu.wiki/w/%ED%96%89%EB%A0%AC%EA%B3%B1
행렬곱
Matrix Multiplication 행렬 의 곱셈은 여타 행렬의 연산과 같이 '크기가 맞는' 경우에만 정의되는데
namu.wiki
우선 정답이 담길 배열을 0으로 초기화 해주자.
곱셈 결과 나오는 행렬의 크기는 (앞 행렬의 행의 수) × (뒤 행렬의 열의 수)가 된다.
즉, 앞 행렬의 크기가 m×n이고 뒷 행렬의 크기가 n×r인 경우, 곱셈 결과 나오는 행렬의 크기는 m×r이 된다.
그 후에 행렬의 곱 공식에 맞춰서 각 행렬에 들어갈 값을 계산한다.
3중 반복문을 활용하여 3개의 index를 활용하였다.
행렬은 직사각형으로 행 간의, 열 간이 길이는 일정하기 때문에 arr1[0]의 길이를 구하면 arr1 모든 열의 길이를 구할 수 있다.
3. 코드
나의 풀이:
def solution(arr1, arr2):
answer = [[0]*len(arr2[0]) for _ in range(len(arr1))]
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
다른 풀이:
def solution(arr1, arr2):
result = []
for arr in arr1:
temp = []
for j in range(len(arr2[0])):
r = 0
for i, n in enumerate(arr):
r += n * arr2[i][j]
temp.append(r)
result.append(temp)
return result