→ Problems

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

Swift librarian 2024. 12. 27. 16:07

🥸 문제 소개

오랜만에 코딩테스트 연습을 해보려고 아래의 문제를 간단하게 풀어보기로 했다.

🤔 문제 풀이

오랜만에 행렬을 마주하니 생각보다 시간이 조금 걸렸던듯... 행렬이 가물가물 했었다. 아래의 식을 활용하여 간단하게 코드를 작성할 수 있었다.

func solution(_ a: [[Int]], _ b:[[Int]]) -> [[Int]] {
    let m = a.count
    let n = a[0].count
    let p = b[0].count
    
    var ans = Array(repeating: Array(repeating: 0, count: p), count: m)
    
    for i in 0..<m {
        for j in 0..<p {
            for k in 0..<n {
                ans[i][j] += a[i][k] * b[k][j]
            }
        }
    }
    
    return ans
}

🔥 추가 학습

아니 행렬은 너무너무너무나도 유용하고 유명한 수학 연산인데 Swift에서 기본적으로 제공해주는 것은 없을까? 라는 의문이 들었다.

 

아래의 공식문서에서 찾아볼 수 있었다!

 

Working with Matrices | Apple Developer Documentation

Solve simultaneous equations and transform points in space.

developer.apple.com

 

첫번째 곱셈을 코드로 표현해보면 아래와 같다.

import simd

// [[1, 4], [3, 2], [4, 1]] * [[3, 3], [3, 3]]

let x = simd_double3(1, 3, 4)
let y = simd_double3(4, 2, 1)
let z = simd_double2(3, 3)

let a = simd_double2x3([x, y])
let b = simd_double2x2([z, z])

let ans = simd_mul(a, b)

print(ans)

 

아래의 프레임워크 인듯 하지만... 행렬의 연산보다는 이미지, 벡터처리에 최적화된 프레임워크라는 생각이 든다.

단순한 계산을 위해서라면 내가 한 것처럼 직접 구현하는 수준에서 충분히 가능한 듯 보인다.