기억은 짧고 기록은 길다
[프로그래머스/Programmers] 행렬의 곱셈 - Python 본문
Link
코딩테스트 연습 - 행렬의 곱셈
[[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]]
programmers.co.kr
Solution
해당 문제의 Solution에서는 가장 기본적이고 이해하기 쉬운 풀이 방법을 보여주고 있다.
하지만 Other Solution에서 zip()을 이용한 풀이가 매우 좋은 풀이라고 생각한다. zip()과 zip(*arr2)를 직접 돌려보면서 왜 저러한 코드로 해결되었고 어떤 과정을 거쳐 해결되는지 이해하고 지나가길 바란다.
def solution(arr1, arr2):
r = len(arr1)
c = len(arr2[0])
answer = [[0] * c for _ in range(r)]
for i in range(r):
for j in range(c):
for k in range(len(arr1[0])):
answer[i][j] += arr1[i][k] * arr2[k][j]
return answer
🔑 key point: answer[i][j] += arr1[i][k] * arr2[k][j]
Other Solution
def solution(arr1, arr2):
return [[sum(a * b for a, b in zip(arr1_row, arr2_col)) for arr2_col in zip(*arr2)] for arr1_row in arr1]
🔑 key point: zip(), zip(*arr2)
'CodingTest > programmers' 카테고리의 다른 글
[프로그래머스/Programmers] N개의 최소공배수 - Python (0) | 2021.09.09 |
---|---|
[프로그래머스/Programmers] H-index - Python (0) | 2021.09.09 |
[프로그래머스/Programmers] 올바른 괄호 - Python (0) | 2021.09.08 |
[프로그래머스/Programmers] 소수 찾기 _2- Python (0) | 2021.09.08 |
[프로그래머스/Programmers] 가장 큰 수 - Python (0) | 2021.09.07 |
Comments