안녕하세요. 이번에는 프로그래머스 행렬의 곱셈 문제를 풀어보려고 합니다.
Problem
https://school.programmers.co.kr/learn/courses/30/lessons/12949
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. 다른 사람 코드 |
반응형
'프로그래머스 Algorithm' 카테고리의 다른 글
[프로그래머스] 의상 풀이 Kotlin (0) | 2024.01.23 |
---|---|
[프로그래머스] 모의고사 풀이 Kotlin (0) | 2024.01.17 |
[프로그래머스] 과일장수 풀이 Kotlin (0) | 2024.01.16 |
[프로그래머스] 2016년 Kotlin (0) | 2024.01.14 |
[프로그래머스] H-Index Kotlin (2) | 2024.01.13 |