문제 확인

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

나의 풀이

  • 행렬의 곱을 얻기 위해선 arr1의 행과 arr2 열 사이의 연산이 필요하다.
  • arr2의 열 성분을 얻기 위해서 zip(*arr2)를 활용했다.
    • *arr2를 통해 unpacking을 하면 각 행 별 리스트([] [] [])를 얻을 수 있고, zip을 사용하면 리스트의 n 번째 항 끼리 묶을 수 있다.
    • 각 행의 n 번째 항 끼리 묶은 것은 결국 행렬의 열과 동일하다. 
# (a x b) * (b x a) = (a x a)
# 행 - 열 성분 사이 곱
def solution(arr1, arr2):
    # 출력 행렬의 크기 : (arr1의 행 길이 x arr2의 열 길이)
    answer = [[0 for _ in range(len(arr2[0]))]for _ in range(len(arr1))]
    for i, row in enumerate(arr1):
        # 행 - 열 뒤집기
        for j, col in enumerate(zip(*arr2)):
            # 행 - 열 사이 곱
            answer[i][j] = sum([row[k] * col[k] for k in range(len(col))])
            
    return answer