프로그래머스

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

띵지니어 2024. 11. 7. 17:34
반응형

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

내 코드

func solution(_ arr1: [[Int]], _ arr2: [[Int]]) -> [[Int]] {
    
    var result: [[Int]] = Array(repeating: Array(repeating: 0, count: arr2[0].count), count: arr1.count)
    
    for i in 0..<arr1.count {
        for j in 0..<arr2[0].count {
            for k in 0..<arr1[0].count {
                result[i][j] += arr1[i][k] * arr2[k][j]
            }
        }
    }
    
    return result
}

 

Review

먼저 arr1 과 arr2를 곱하면 나올 수 있는 크기의 배열을 초기화 해줍니다.

예를들어 3x2 * 2x2 행렬을 곱하면 3x2 행렬이 나옵니다.

var result: [[Int]] = Array(repeating: Array(repeating: 0, count: arr2[0].count), count: arr1.count)

 

이후 3중 for문을 통해 행렬의 곱셈을 진행합니다.

arr1.count 는 row 즉, arr1의 행의 수를 나타냅니다.
arr2[0].count 는 col 즉, arr2의 열의 수를 나타냅니다.
arr1[0].count 는 col 즉, arr1의 열의 수를 나타냅니다.

따라서 아래 그림 처럼 하나씩 연산을 진행해 준다면

아래와 같은 코드로 정리할 수 있습니다.

for i in 0..<arr1.count {
    for j in 0..<arr2[0].count {
        for k in 0..<arr1[0].count {
            result[i][j] += arr1[i][k] * arr2[k][j]
        }
    }
}
반응형
목차(index)