
일단 가장 먼저 든 생각은 0부터 9까지의 합에서 전체 합을 빼자!! 였다. (뭔가 이 방법이 아닌 실제로 리스트에서 없는 숫자를 추출해 합을 구하는게 출제 의도인가 싶지만 그냥 함)
나의 해답 코드는
func solution(_ numbers:[Int]) -> Int {
var sum = numbers.reduce(0, +)
return (45 - sum)
}
무난하게 정답 처리되었다.😗 다른 사람들의 풀이를 보니까 내가 생각한 출제의도처럼 푸신 분이 있었다!!
func solution(_ numbers: [Int]) -> Int {
return (0...9).filter { !numbers.contains($0) }.reduce(0, +)
}
깔끔 그자체..!!!!! 역시 고차함수를 잘 다룰줄 알아야하는것 같다. 여기서 (0...9)는 범위연산자로 표현한 범위로 시퀀스에 해당한다. 고차함수를 공부할때 고차함수는 컬렉션에서만 사용가능하다고 했었는데 범위도 포함이다! contains같은 메서드는 범위에서 동작하지 않지만 고차함수는 가능하다는 것!!
filter 함수는 컬렉션의 요소를 걸러서 새로운 컬렉션으로 반환하는 고차함수이다. bool 값을 토대로 리스트를 필터링한다는 것을 알아두어야 한다.
var list = [1,2,3,4]
var list1 = list.filter{ $0 % 2 == 0 }
var list2 = list.filter { !($0 % 2 == 0) }
print(list1)
print(list2)
reduce 함수는 컬렉션의 모든 요소를 결합하여 단일 값으로 줄이는 고차 함수이다.