Old_SWIFT(221012)/코딩테스트

행렬의 곱셈

KataRN 2022. 9. 13. 22:10
반응형

안녕하세요. KataRN입니다.

 

오늘은 행렬의 곱셈에 대해서 알아보겠습니다.

 

 

행렬의 곱셈의 경우 행과 열을 곱해야되는데 필요할때마다 저는 돌려서 쓰는데 효율이 별로 안좋은것 같아서 효율좋은 코드를 남기려고합니다.

 

이건 제가 임의로 만든 코드인데 그냥 그럭저럭인것 같아요...

func solution(_ arr1:[[Int]], _ arr2:[[Int]]) -> [[Int]] {
    var answer = Array(repeating: Array(repeating: 0, count: arr2[0].count), count: arr1.count)
    let arr3 = convertArr(arr2)
    for i in 0..<answer.count {
        for j in 0..<answer[i].count {
            answer[i][j] = zip(arr1[i], arr3[j]).map{$0 * $1}.reduce(0, +)
        }
    }
    return answer
}

func convertArr(_ arr: [[Int]]) -> [[Int]] {
    var answer = [[Int]]()
    for i in 0..<arr[0].count {
        var temp = [Int]()
        for j in 0..<arr.count {
            temp.append(arr[j][i])
        }
        answer.append(temp)
    }
    return answer
}

 

이건 훨씬 효율이 좋은 코드입니다.

func solution(_ arr1: [[Int]], _ arr2: [[Int]]) -> [[Int]] {

    var convertArr = [[Int]](repeating: [Int](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[i].count {
                convertArr[i][j] = convertArr[i][j] + arr1[i][k] * arr2[k][j]
            }
        }
    }

    return convertArr
}

 

오늘도 읽어주셔서 감사합니다.

다음에 봬요~

반응형

'Old_SWIFT(221012) > 코딩테스트' 카테고리의 다른 글

약수의 개수 구하기  (0) 2022.06.07
글자 < - > 숫자 변환 UnicodeScalar() 다루기  (0) 2022.06.03
코딩테스트용 참고사전  (0) 2022.03.14
순열과 조합  (0) 2021.11.15
소수 구하기  (0) 2021.10.18