내 풀이
import numpy as np
def solution(A, B):
return (np.matrix(A)*np.matrix(B)).tolist()
def solution(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]
1번 풀이는 Numpy를 이용한 풀이다. 과거에 기계 학습을 이용해서 넘파이와 판다스를 통해서 공부한 기억이 있어 쉽게 풀수 있었다
근데 numpy나 pandas는 pip를 이용해서 설치해야하는 외부 모듈이다. 내 생각에는 아마도 넘파이를 지원하지 않을 확률이 높을거 같다.
마지막에 tolist로 바꿔주는 이유는 numpy의 return 값이 numpy이기 때문이다. 그런데 대부분의 코딩테스트 시 return 할 수 있는 형태가 정해져있다. 그렇기 때문에 바꿔줘야한다.
2번 풀이는 zip의 언패킹을 활용한 풀이다.
zip은 패킹과 언패킹을 할 수 있는데
차근차근 해석해보자면
1) sum(a*b) for a,b in zip(A_row,B_col)
a,b 의 합을 구하는데 그 a,b는 a_row,b_col을 zip한 것이다
아래 그림을 보면 zip의 역할을 알 수 있는데 어떤 내용을 zip하게 되면 하나의 셋트로 묶어준다.
2) 그럼 a_row와 b_col은 무엇인가?
b_col은 zip(*B)를 한것인데 이를 언패킹이라고 부르고 이것의 역할 역시 아래 예시를 보면 알 수 있다.
그러니까 b의 요소들을 언패킹해서 b_col 에 할당해주는것이다.
3)근데 그럼 왜 A는 언패킹 해주지 않아도되냐?
이유는 행렬의 계산 자체가 그렇게 하는거라서이다.
다른사람의 풀이
https://hmkim312.github.io/posts/Zip과_언팩킹/
잘 이해가 안된다면 패킹과 언패킹관련 글을 하나 보는것을 추천한다.
'취준 > 프로그래머스' 카테고리의 다른 글
방문 길이 - 파이썬 (1) | 2022.10.05 |
---|---|
야근 지수 - 파이썬 (0) | 2022.09.13 |
영어 끝말잇기 - 파이썬 (0) | 2022.09.12 |
k진수에서 소수 개수 구하기 - 파이썬 (0) | 2022.09.11 |
최고의 집합 - 파이썬 (0) | 2022.09.11 |