본문 바로가기
프로그래머스 Algorithm

[프로그래머스] 행렬의 곱셈 풀이 Kotlin

by Echung 2024. 1. 19.

thumbnail

안녕하세요. 이번에는 프로그래머스 행렬의 곱셈 문제를 풀어보려고 합니다. 

Problem


https://school.programmers.co.kr/learn/courses/30/lessons/12949

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

Solution


class Solution {
    fun solution(arr1: Array<IntArray>, arr2: Array<IntArray>): Array<IntArray> {
        var answer = Array(arr1.size) { IntArray(arr2[0].size) }

        for(i in arr1.indices) {
            for(j in answer[i].indices) {
                var sum: Int = 0

                for(k in arr1[0].indices) {
                    sum += arr1[i][k] * arr2[k][j]    
                }

                answer[i][j] = sum
            }
        }

        return answer
    }
}

 이번 문제는 행렬의 곱셈을 구하는 문제입니다. 행렬의 곱셈은 앞의 행과 뒤에 열들을 곱해주면 됩니다. 예를 보면 쉽게 이해할 수 있을 것입니다.

EX)
a11 a12 * b11 b12
a21 a22 b21 b22

=

(a11 * b11) + (a12 * b21) (a11* b12) + (a12 * b22)
(a21 * b11) + (a22 * b21) (a21 * b12) + (a22 * b22)

위의 결과가 나옵니다. 이렇게 for문을 사용해서 코드를 작성하면 쉽게 풀 수 있는 문제였습니다.

1. 다른 사람 코드

class Solution {
    fun solution(arr1: Array<IntArray>, arr2: Array<IntArray>): Array<IntArray> {
        var answer = Array<IntArray>(arr1.size) { i -> 
                Array<Int>(arr2[0].size) { j ->
                        var value = 0
                        for(n in 0 until arr1[i].size) {
                            value += (arr1[i][n] * arr2[n][j])
                        }
                        value
                }.toIntArray()
        }

        return answer
    }
}
이번 코드는 첨부터 배열을 선언하면서 계산하는 방식으로 짜여진 코드입니다. 이번 문제도 대부분 비슷하게 풀이한 것 같습니다. 조금 더 나은 코드가 있으면 언제든지 편하게 댓글로 남겨주시면 감사합니다 :)

Performance

1. 내가 작성한 코드 2. 다른 사람 코드
반응형