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
'Algorithm > level2' 카테고리의 다른 글
[ 프로그래머스 - Java & Kotlin ] 최솟값 만들기( 자바 & 코틀린 ) (0) | 2021.09.12 |
---|---|
[ 프로그래머스 - Kotlin ] 피보나치 수 ( 코틀린 ) (0) | 2021.09.12 |
[ 프로그래머스 - Kotlin ] JadenCase 문자열 만들기 ( 코틀린 ) (0) | 2021.09.11 |
[ 프로그래머스 - Kotlin ] N개의 최소공배수 ( 코틀린 ) (0) | 2021.09.08 |
[ 프로그래머스 - java & Kotlin ] 행렬 테두리 회전하기 ( 자바 & 코틀린 ) (2) | 2021.09.08 |