2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.
행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.
곱할 수 있는 배열만 주어집니다
fun solution(arr1: Array<IntArray>, arr2: Array<IntArray>): ArrayList<IntArray> {
val result = ArrayList<IntArray>()
for (i in arr1.indices) {
val row = IntArray(arr2[0].size) { 0 }
for (j in arr2[0].indices){
for (k in arr1[0].indices){
row[j] += arr1[i][k] * arr2[k][j]
}
}
result.add(row)
}
return result
}
말그대로 행렬의 곱대로 풀어봤다.
수학문제 느낌
여기서 코드를 간결하게 해보겠다.
fun solution(arr1: Array<IntArray>, arr2: Array<IntArray>): ArrayList<IntArray> {
return arr1.map { row1 ->
IntArray(arr2[0].size) { j ->
row1.indices.sumOf { k -> row1[k] * arr2[k][j] }
}
}.toCollection(ArrayList())
}
arr1과 arr2 result를 대충 그려보면 이런 모양일거다
여기서 .map으로 row를 구분
arr1.map { row1 ->
result의 열에 넣어줄 배열을 만들어주고
result의 열과 arr2[0]의 크기가 같기때문에 사이즈를 arr2[0].size로 설정
IntArray(arr2[0].size) { j ->
indices해서 arr1의 요소k를 arr2의 k행 j열의 값과 곱한뒤 더 해주고
row1.indices.sumOf { k -> row1[k] * arr2[k][j] }
.toCollection(ArrayList()): map 함수로 생성된 리스트(List)를 ArrayList로 변환하여 반환한다