[문제 요약]
2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.
제한 조건
- 행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
- 행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.
- 곱할 수 있는 배열만 주어집니다.
https://school.programmers.co.kr/learn/courses/30/lessons/12949
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
🎨 풀이
💡 전체 코드
def solution(arr1, arr2):
answer = [[0 for _ in range(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(arr2[0])):
answer[i][j] += arr1[i][k] * arr2[k][j]
return answer
> 핵심 : 행렬의 곱셈 식 파악!
🍦 코드 설명 (실행 순서대로 나열)
#solution
answer = [[0 for _ in range(len(arr2[0]))] for _ in range(len(arr1))]
1. answer의 틀을 잡는다.
- ( l * n == len(arr1) * len(arr2[0]) 인데, len(arr2[0))가 len(arr1)개 있는 리스트 형태로 나타내기 위해 위와 같이 코딩을 했다.
# 행렬의 곱셈 식 그대로 코드 작성
for i in range(len(arr1)):
for j in range(len(arr2[0])):
for k in range(len(arr2[0])):
answer[i][j] += arr1[i][k] * arr2[k][j]
return answer
# 행렬의 곱셈
2. answer[i][j]에 arr[i][k] * arr2[k][j]를 더해주면 된다.
- 위에 나와있는 그림을 보면 이해가 쉽다. i는 len(arr1), k는 len(arr2[0]), j는 len(arr2[0])이다.
- 이 때, k 범위에 len(arr2[0]) 대신 len(arr1)을 써도 된다.
3. answer을 return 해준다!

참고한 블로그 : https://j1w2k3.tistory.com/575
[행렬 이론 03탄] 행렬의 연산 (곱셈)
주요 목표 주요한 개념에 대한 간결한 이해를 돕기 위해서 기본 론을 주제별로 나누어서 정리를 하고자 만들어 보았습니다. 주요내용 행렬의 곱셈의 원리와 계산방법 주로 행렬의 연
j1w2k3.tistory.com
⭐ 느낀점
> 살짝 하나하나 해보면서 감을 잡았던 것 같다. 행렬은 적지 않게 봤는데도 볼 때마다 어떻게 푸는 지 모르겠다. ㅋㅋㅋ 맨날 리셋되는 기분이다 ㅠㅠ 파이팅해보자 파이팅!
'🎲 알고리즘 공부 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 / 입문] 모스부호 (1) (파이썬) (2) | 2022.09.30 |
---|---|
[프로그래머스 / 입문] 배열 두 배 만들기 (파이썬) (0) | 2022.09.29 |
[프로그래머스 / Level 2] 프린터 (파이썬) (0) | 2022.09.26 |
[프로그래머스 / Level 2] 영어 끝말잇기 (파이썬) (0) | 2022.09.24 |
[프로그래머스 / Level 2] 카펫 (파이썬) (0) | 2022.09.23 |