본문 바로가기

Algorithm/level2

[ 프로그래머스 - Kotlin ] 행렬의 곱샘 ( 코틀린 )

728x90

( 연습문제 / 행렬의 곱셈 )

[문제]

문제 설명

2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.

제한사항

  • 행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
  • 행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.
  • 곱할 수 있는 배열만 주어집니다.

입출력 예시

arr1 arr2 return
[[1, 4], [3, 2], [4, 1]] [[3, 3], [3, 3]] [[15, 15], [15, 15], [15, 15]]
[[2, 3, 2], [4, 2, 4], [3, 1, 4]] [[5, 4, 3], [2, 4, 1], [3, 1, 1]] [[22, 22, 11], [36, 28, 18], [29, 20, 14]]

[풀이]

해당 문제에서는 행렬의 곱이 성립하는 경우만 주어진다고 했기 때문에 다른 처리는 필요 없이 바로 행렬의 곱을 진행해 주시면 됩니다.

arr1행렬이 j * k의 크기이고 arr2행렬은 k * j라고 할 경우 두 행렬의 곱의 결과의 크기는 j * i입니다.

여기서 arr1 * arr2에서 arr1의 i번째 행의 원소의 개수와 arr2의 j번째 열의 원소의 개수가 같은 점을 이용하여 k의 크기만큼 돌리는 반복문을 마지막에 위치시키는 방법만 떠오른다면 쉽게 풀 수 있습니다.

 

자세한 내용은 아래 코드의 주석에서 설명하도록 하겠습니다.


[코드]

class Solution {
    fun solution(arr1: Array<IntArray>, arr2: Array<IntArray>): Array<IntArray> {
    	// arr1의 행의 개수만큼 반복
        return Array(arr1.size){ i ->
        	// arr2의 행의 개수만큼 반복
            IntArray(arr2[0].size){ j ->
                var value = 0
                // arr1의 열의 개수만큼 반복 or arr2의 행의 개수만큼 반복
                for(k in arr2.indices){
                    value += arr1[i][k] * arr2[k][j]
                }
                // 계산된 결과의 원소값을 반환
                value
            }
        }
    }
}

문제링크

 

코딩테스트 연습 - 행렬의 곱셈

[[2, 3, 2], [4, 2, 4], [3, 1, 4]] [[5, 4, 3], [2, 4, 1], [3, 1, 1]] [[22, 22, 11], [36, 28, 18], [29, 20, 14]]

programmers.co.kr

 

제가 잘못 알고 있거나 잘못된 부분이 있을 경우 알려주시고 추가로 궁금한 점 있으신 분들도 댓글이나 메일 주시면 성실히 답변해 드리겠습니다.🧑🏻‍💻

감사합니다~😄

728x90