본문 바로가기

코딩테스트

[프로그래머스] 행렬의 곱셈

난이도 : Lv 2

분류 : 구현

문제

 
import Foundation

func solution(_ arr1:[[Int]], _ arr2:[[Int]]) -> [[Int]] {
    var answer = Array(repeating: Array(repeating: 0, count: arr2[0].count), count: arr1.count)
    
    for i in 0..<arr1.count { // arr1 의 길이만큼 반복
        for j in 0..<arr2[0].count { // arr2[0] 의 길이만큼 반복
            for k in 0..<arr2.count { // arr2 의 길이만큼 반복
                answer[i][j] += arr1[i][k] * arr2[k][j] // 행렬 곱을 수행
            }
        }
    }
    
    return answer
}

 

풀이

1. 계산된 행렬을 저장할 answer Array 를 만듭니다. 행렬곱의 경우 A 행렬의 행의 수 * B 행렬의 열의 수 의 크기를 갖습니다.

2. 반복문을 사용해 각 행렬의 값을 계산합니다.

 

P.S

3중 for 를 사용해서 시간 복잡도가 꽤 높지만, 행렬이 작기 때문에 괜찮습니다.