문제.
정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.제한 조건
- arr은 길이 1 이상인 배열입니다.
- 인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다.
풀이.
//나의 풀이
func solution(_ arr:[Int]) -> [Int] {
var arr = arr
if arr.count <= 1 {
return [-1]
} else{
let smaller = arr.sorted()[0]
arr.remove(at: arr.firstIndex(of: smaller)!)
return arr
}
}
// 인상깊은 풀이
func solution(_ arr:[Int]) -> [Int] {
let min = arr.sorted(by: <)[0]
return arr.count == 1 ? [-1] : arr.compactMap({ return $0 != min ? $0 : nil })
}
요구사항
1. 일단 가장 작은수를 구하는것 하자마자 생각나는 것은 정렬이여서 쉽게 수를 구할수 있겠다는 생각이 들었고 어떻게 없애야 할지를 고민하다가. 중복되는 수가 없고 예외사항은 배열의 길이가 1인 경우 뿐이여서 firstIndex를 사용했다.
2. 한가지 이해가 잘되지 않는 점이라면 코드의 길이를 줄이기 위해 remove(at: 이자리 ) 이자리에 arr.firstIndex(of: smaller)를 넣었는데 옵셔널이 떠서 !를 붙여주었다는 것이다.
3. 시스템상으로 미리 확인을 못하는 것이기 때문에 옵셔널이 뜨는 것 같다.
4. 인상깊은 풀이는 compactMap을 활용한 문제 풀이였는데 클로저를 활용할 생각을 못했다.
'IOS > Swift Algorithm Level 1' 카테고리의 다른 글
Swift. 키패드 누르기 (0) | 2020.10.29 |
---|---|
Swift. 짝수와 홀수 (0) | 2020.10.28 |
Swift. 정수 제곱근 판별 (0) | 2020.10.26 |
Swift. 정수 내림차순으로 배치하기 (0) | 2020.10.24 |
Swift. 자연수 뒤집어 배열로 만들기 (0) | 2020.10.23 |