[문풀] filter { !numbers.contains($0) }.reduce(0, +)

Kiwi·2024년 3월 20일

Algorithm

목록 보기
2/17
post-thumbnail

⚙️ 없는 숫자 더하기

문제

일단 가장 먼저 든 생각은 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

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

reduce 함수는 컬렉션의 모든 요소를 결합하여 단일 값으로 줄이는 고차 함수이다.

profile
🐣 iOS Developer

0개의 댓글