Simple&Natural

행렬의 곱셈 구현 본문

코딩테스트 풀이/그외

행렬의 곱셈 구현

Essense 2020. 4. 6. 01:58
728x90

어떤 분이 질문을 하는 바람에 답변을 하는 겸 풀었던 행렬의 곱셈 관련 문제이다.

 

2차원 행렬의 곱셈은 기본적으로 m x n 행렬과 n x r 행렬의 곱인 경우에만 계산이 가능하다.

 

행렬을 2차원 배열로 만들고 앞 행렬의 행(M)과 뒤에 곱해지는 행렬의 열(R)을 각각 곱하고 합하면(N) 된다.

 

 

 

 

 

언어: Kotlin

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
fun main() {
    for (arr in solution("2 3 2""100 0 1 2 3 4""50 60 70 75 8 9")) {
        println()
        for (num in arr) {
            print("$num ")
        }
    }
}
 
fun solution(mnr: String, mn: String, nr: String): Array<Array<Int>> {
    val m = Character.getNumericValue(mnr.replace(" """)[0])
    val n = Character.getNumericValue(mnr.replace(" """)[1])
    val r = Character.getNumericValue(mnr.replace(" """)[2])
    val answer = Array(m) { Array(r) {0} }
 
    val mnMatrix = Array(m) {
        mn.split(" ").toTypedArray().sliceArray(IntRange(it*n, it*n+n-1))
    }
 
    val nrMatrix = Array(n) {
        nr.split(" ").toTypedArray().sliceArray(IntRange(it*r, it*r+r-1))
    }
 
    for (M in 0 until m) {
        for (R in 0 until r) {
            for (N in 0 until n) {
                answer[M][R] += mnMatrix[M][N].toInt()*nrMatrix[N][R].toInt()
            }
        }
    }
 
    return answer
}
cs
728x90

'코딩테스트 풀이 > 그외' 카테고리의 다른 글

배열 회전하기  (0) 2020.08.27