🥸 문제 소개
오랜만에 코딩테스트 연습을 해보려고 아래의 문제를 간단하게 풀어보기로 했다.
🤔 문제 풀이
오랜만에 행렬을 마주하니 생각보다 시간이 조금 걸렸던듯... 행렬이 가물가물 했었다. 아래의 식을 활용하여 간단하게 코드를 작성할 수 있었다.
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)
아래의 프레임워크 인듯 하지만... 행렬의 연산보다는 이미지, 벡터처리에 최적화된 프레임워크라는 생각이 든다.
단순한 계산을 위해서라면 내가 한 것처럼 직접 구현하는 수준에서 충분히 가능한 듯 보인다.
'→ Problems' 카테고리의 다른 글
[Algorithm] 프로그래머스 - 모음사전 (0) | 2025.02.05 |
---|---|
[Algorithm] 프로그래머스 - 타겟 넘버 (0) | 2025.01.15 |
[Algorithm] 백준 - 6549번 히스토그램에서 가장 큰 직사각형 (Swift) (0) | 2024.08.15 |
[Algorithm] 백준 - 9251번 LCS (Swift) (0) | 2024.08.14 |
[Algorithm] 백준 - 11444번 피보나치 수 6 (Swift) (0) | 2024.08.13 |