https://school.programmers.co.kr/learn/courses/30/lessons/12949
안녕하세요 맨덕입니다.
오늘은 프로그래머스에서 행렬의 곱셈을 풀어봤습니다.
오랜만에 행렬의 곱셈을 하려다보니 제가 푸는 방식이 맞는지 헷갈렸습니다.. : )
그래서 행렬의 곱셈의 공식부터 정리하겠습니다.
행렬의 곱셈
문제풀이
- 원소 하나씩 인덱스로 접근하여 계산합니다.
solution - 성공
def solution(arr1,arr2):
# [[0, 0], [0, 0], [0, 0]]
result = [[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])):
result[i][j] += arr1[i][k] * arr2[k][j]
return result
다른 사람 풀이 - zip
def productMatrix(A, B):
return [[sum(a*b for a, b in zip(A_row,B_col)) for B_col in zip(*B)] for A_row in A]
- zip으로 B의 행렬을 행과 열을 바꾼다.
- A의 행(a,b)과 행과 열을 바꾼 B 행렬의 행(c,d)을 계산하고 리스트에 저장한다.
- ac + bd
[출처] - 위키백과/행렬의 곱셈 https://ko.wikipedia.org/wiki/%ED%96%89%EB%A0%AC_%EA%B3%B1%EC%85%88
'algorithm > programmers' 카테고리의 다른 글
[JS] 전력망 둘로 나누기 -bfs (0) | 2023.10.24 |
---|---|
[JS] 오픈채팅방 - Object와 Map의 차이점 (0) | 2023.10.10 |
[PYTHON/파이썬] Level2 [1차]캐시 - LRU/deque/maxlen (0) | 2023.02.18 |
[PYTHON/파이썬] level 2 괄호회전하기 - deque (0) | 2023.02.18 |
[JS] level0 점의 위치 구하기 - 삼항연산자, 구조분해할당 (0) | 2022.12.20 |
댓글