문제 설명
2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.
제한 조건
- 행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
- 행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.
- 곱할 수 있는 배열만 주어집니다.
입출력 예
내가 시도한 방법
fun solution(arr1: Array<IntArray>, arr2: Array<IntArray>): Array<IntArray> {
var answer = arrayOf<IntArray>()
val answerList = answer.toMutableList()
for (arr1RowIndex in arr1.indices) {
var answerColumn = mutableListOf<Int>()
var count = 0
for (arr2RowIndex in arr2.indices) {
var num = 0
for (arr1ColumnIndex in arr1[arr1RowIndex].indices) {
num += arr1[arr1RowIndex][arr1ColumnIndex] * arr2[arr1ColumnIndex][count]
}
count++
answerColumn.add(num)
}
answerList.add(answerColumn.toIntArray())
}
answer = answerList.toTypedArray()
return answer
}
기본적으로 행렬의 곱셈 자체를 잊어버린지 한참됐고, 그래서 행렬의 곱셈을 검색해서 다시 이해하는데 시간이 꽤 걸렸다. 수학의 정석을 행렬만 봤었던 기억만 남았는데... 머릿속에서 수학은 완전 사라졌는지 오렌지...
기본적인 입출력예만 통과하고 테스트케이스는 모조리 실패
행렬
행렬곱셈
참고 https://mathbang.net/562#gsc.tab=0
행렬 곱셈을 위해선 첫째 행렬의 열 갯수와 둘째 행렬의 행 갯수가 동일해야한다. 곱셈의 결과 새롭게 만들어진 행렬은 첫째 행렬의 행 갯수와 둘째 행렬의 열 갯수를 가진다.
코드 첨삭
fun solution(arr1: Array<IntArray>, arr2: Array<IntArray>): Array<IntArray> {
// 행렬 곱셈이 가능하려면 arr1의 열의 수와 arr2의 행의 수가 같아야 한다.
val rowCount1 = arr1.size
val colCount1 = arr1[0].size
val rowCount2 = arr2.size
val colCount2 = arr2[0].size
// 결과 행렬의 크기는 arr1의 행의 수 x arr2의 열의 수
val answer = Array(rowCount1) { IntArray(colCount2) }
// 행렬 곱셈 수행
for (i in 0 until rowCount1) {
for (j in 0 until colCount2) {
for (k in 0 until colCount1) {
answer[i][j] += arr1[i][k] * arr2[k][j]
}
}
}
return answer
}
일단은 첨삭 받은 코드를 보고 이해하는걸로 만족 해야겠다.
반응형
'Dev > Algorithm' 카테고리의 다른 글
간만의 알고리즘 공부 - 8 (하샤드 수) (0) | 2024.07.06 |
---|---|
간만의 알고리즘 공부 - 7 (두 정수 사이의 합 | 등차수열의 합) (0) | 2024.07.05 |
간만의 알고리즘 공부 - 4 (이진 변환 반복하기) (0) | 2024.07.03 |
간만의 알고리즘 공부 - 3 (정수제곱근 판별) (0) | 2024.06.30 |
간만의 알고리즘 공부 - 2 (최소공배수) (0) | 2024.06.27 |