행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.
class Solution { fun solution(arr1: Array<IntArray>, arr2: Array<IntArray>): Array<IntArray> { var answer = arrayOf<IntArray>() answer = arr1.zip(arr2) { a, b -> (a zip b).map { (x, y) -> x + y }.toIntArray() }.toTypedArray() return answer } }
- arr1.zip(arr2) : 두 개의 2차원 배열을 zip하여 List< List < Int > >가 생성된다.
- a, b -> : a는 arr2, b는 arr2에서 동일한 인덱스에 위치한 1차원 배열을 나타낸다.
- (a zip b) : a, b의 동일한 인덱스에 위치한 요소들을 쌍으로 묶어 List< Pair < Int, Int > >를 생성한다.
- .map { (x, y) -> x + y } : 각 쌍의 요소들을 더하고 그 결과로 List< Int >를 생성한다.
- .toIntArray() : IntArray로 변환한다.
- .toTypedArray() : 리스트의 리스트를 2차원 배열로 변환한다.
class Solution { fun solution(arr1: Array<IntArray>, arr2: Array<IntArray>): Array<IntArray> { return Array(arr1.size) { row -> IntArray(arr1[0].size) { col -> arr1[row][col] + arr2[row][col] } } } }
- Array(arr1.size) : 결과로 반환할 배열을 생성하며, 행의 개수는 arr1의 개수와 동일하게 생성한다.
- { row -> .. } : 각 행에 대한 람다식으로 행 인덱스 row를 매개변수로 받아서 처리한다.
- IntArray(arr1[0].size) : 각 행마다 새로운 IntArray를 생성한다. 열의 개수는 arr1의 열의 개수와 동일하다.
- { col -> .. } : 각 열에 대한 람다식으로 열 인덱스 col을 매개변수로 받아서 처리한다.
- arr1[row][col] + arr2[row][col] : 각 행과 열에 위치한 요소를 더한다.
Array(3) { row ->
IntArray(2) { col ->
row + col
}
}
---
_[TIL-240228]_