티스토리 뷰

https://school.programmers.co.kr/learn/courses/30/lessons/12949

 

프로그래머스

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

programmers.co.kr


1. 풀이

  • n x m 행렬A과 m * b 행렬B를 곱한 행렬은 n * b (m이 동일해야 곱셈 가능)

 

 

  • 3중 for문을 사용하자.

행렬A의 첫 번째 행인 [1, 1, 1]이 행렬B의 각 컬럼( [1, 4, 7], [2, 5, 8], [3, 6, 8])과 연산된다. 따라서 일단 행렬A의 행에 접근하는 for문이 필요하다.

그리곤 이제 하나의 행에 대해 3개의 열이 연산되어야 하므로, 컬럼을 인덱싱하는 반복문이 필요하다.

마지막으론 행과 열의 인덱싱용 반복문이 필요하다. 예를 들어 [1, 1, 1] 행과 [1, 4, 7] 열을 계산한다고 하면, 행의 각 위치는 (0, 0), (0, 1), (0, 2)이고, 열의 각 위치는 (0, 0), (1, 0), (2, 0)인데, 이때 0, 1, 2로 늘어나는 인덱스를 나타내기 위해 사용한다.

 

 

 

2. 정답 코드

def solution(arr1, arr2):
    x = len(arr2)
    y = len(arr2[0])
    
    answer = []
    for row in arr1:
        temp = [0] * y
        for i in range(y):
            for j in range(x):
                temp[i] += row[j] * arr2[j][i]
        answer.append(temp)
        
    return answer
728x90