-
20240430 행렬의 덧셈 외카테고리 없음 2024. 4. 30. 17:56
알고리즘 문제 풀이 '행렬의 덧셈'
튜플
오늘의 생각행렬의 덧셈
문제 설명
행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.
제한 사항
행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않습니다.
입출력 예
arr1 arr2 return [[1,2][2,3]] [[3,4],[5,6]] [[4,6],[7,9]] [[1],[2]] [[3],[4]] [[4],[6]] 입력한 코드
func solution(_ arr1:[[Int]], _ arr2:[[Int]]) -> [[Int]] {
return zip(arr1, arr2).map{zip($0,$1).map{$0+$1}}
}두 개의 행렬을 순서대로 묶어서 같은 위치에 있는 요소를 더한 후, 그 결과를 새로운 행렬로 반환해야 한다. Swift의 고차 함수인 zip과 map을 이용하여 행렬의 덧셈을 구현해보았다.
What i learned
1. zip 함수는 두 개의 시퀀스(여기서는 배열)를 인자로 받아, 해당 시퀀스들의 같은 위치에 있는 요소들을 묶어 튜플로 반환한다. 따라서 zip(arr1, arr2)는 arr1과 arr2의 같은 위치에 있는 요소들을 순서대로 묶어 튜플로 반환한다.
2. map 함수는 컬렉션의 각 요소에 대해 주어진 클로저를 실행하고, 그 결과를 새로운 컬렉션으로 반환한다. 따라서 map{zip($0,$1).map{$0+$1}}는 zip(arr1, arr2)로 묶인 각 튜플에 대해 두 요소를 더한 결과를 새로운 배열로 반환하는 과정에 활용했다.
3. 이 때, 클로저 내부에서 $0은 현재 처리 중인 튜플의 첫 번째 요소를, $1은 두 번째 요소를 나타낸다.
4. 튜플(Tuple)은 서로 다른 타입의 값을 여러 개 묶어 하나의 복합적인 값을 표현하는 데이터 타입이다. 튜플은 정해진 순서에 따라 요소들을 포함하며, 각 요소에는 이름을 붙일 수도 있고 이름을 붙이지 않을 수도 있다.
튜플 정의 예시
let person: (String, Int, String) = ("John", 30, "Male")5. 위 예제에서 person 튜플은 세 개의 요소로 구성되어 있으며, 각각의 타입은 (String(문자열), Int(정수), String(문자열))이다.
함수에서 여러 값을 반환할 때나, 간단한 데이터를 임시로 묶어서 전달할 때 주로 사용되며 코드의 간결성을 돕는다.
Swift 공부법에 대해 구글링하다가 주워들은 조언인데 복붙해서 해결할 수 있는 부분이 많지만 알고리즘의 이해가 선행되면 내가 스스로 어떤 문제인지 파악하고 최적화된 구조를 쉽게 떠올려 설계할 수 있기 때문이다. 이 당연한 진리를 왜 떠올리지 못했지? 막상 글로 읽으니 허무하면서도 방향이 잡히고 있는 것 같아서 기쁘다! 일단은 코드를 무작정 따라 쳐보는 걸로 시작하되 필요한 알고리즘을 공부하면서 채워나가야겠다.