상세 컨텐츠

본문 제목

행렬의 곱셈(2레벨)

코딩테스트

by dofury 2023. 1. 25. 22:59

본문

728x90

class Solution {
    fun solution(arr1: Array<IntArray>, arr2: Array<IntArray>): Array<IntArray> {
        val rows = arr2[0].size
        val cols = arr1.size
        var answer = Array(cols) { IntArray(rows) }
        
        
        for((i , value1) in arr1.withIndex())
        {
            for(k in 0..value1.size-1)
            {
                for(j in 0..rows-1)
                {
                    answer[i][j] += arr1[i][k] * arr2[k][j]
                }
            }
        }
        
        return answer
    }
}

행렬에 대한 이해가 부족해서 문제를 이해하는데 오래 걸렸다.

a1 a2
b1 b2
c1 c2

*

x1 x2
y1 y2

=

a1 * x1 + a2 * y1 a1 * x2 + a2 * y2
b1 * x1 + b2* y1 b1 * x2 + b2 * y2
c1 * x1 + c2* y1 c1 * x2 + c2 * y2

이러한 방식으로 계산이 된다.

 

반복문을 중첩해서 계산을 해야하는데 도저히 생각이 나지않아 

다른 해설을 참고해서 문제를 풀었다.

 

해설

2차원 배열을 answer 만든다 이 때
가로는 곱해야하는 2차원 배열의 요소의 길이,
세로는 곱해지는 2차원 배열의 길이 이다.

접근은 a1 -> a2 -> b1-> b2 -> c1 -> c2 순으로 돌면서 누적해서 계산한다.
728x90

'코딩테스트' 카테고리의 다른 글

나는 요리사다  (0) 2023.05.09
수리공 항승  (0) 2023.05.09
위장(2레벨)  (2) 2023.01.25
괄호 회전하기(2레벨)  (0) 2023.01.24
H-Index(2레벨)  (0) 2023.01.21

관련글 더보기

댓글 영역