내 풀이

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과_언팩킹/

 

Zip과 언팩킹

1. Zip과 언패킹 1.1 리스트를 튜플로 zip

hmkim312.github.io

잘 이해가 안된다면 패킹과 언패킹관련 글을 하나 보는것을 추천한다.

'취준 > 프로그래머스' 카테고리의 다른 글

방문 길이 - 파이썬  (1) 2022.10.05
야근 지수 - 파이썬  (0) 2022.09.13
영어 끝말잇기 - 파이썬  (0) 2022.09.12
k진수에서 소수 개수 구하기 - 파이썬  (0) 2022.09.11
최고의 집합 - 파이썬  (0) 2022.09.11

+ Recent posts