Simple&Natural
행렬의 곱셈 구현 본문
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