[문제 요약]
2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.
제한 조건
- 행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
- 행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.
- 곱할 수 있는 배열만 주어집니다.
https://school.programmers.co.kr/learn/courses/30/lessons/12949
🎨 풀이
💡 전체 코드
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
⭐ 느낀점
> 살짝 하나하나 해보면서 감을 잡았던 것 같다. 행렬은 적지 않게 봤는데도 볼 때마다 어떻게 푸는 지 모르겠다. ㅋㅋㅋ 맨날 리셋되는 기분이다 ㅠㅠ 파이팅해보자 파이팅!
'알고리즘 공부 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 / 입문] 모스부호 (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 |