filter는 익숙한 문법입니다. '걸러내다' 라는 의미를 갖고 있으며 조건에 맞는 원하는 값을 걸러내는데 사용되며 아래처럼 사용됩니다.

func solution(_ array:[Int], _ n:Int) -> Int {
    return array.filter { $0 == n }.count
}

 

reduce로 숫자 더하기

let numbers = [1, 2, 3, 4, 5]


이 배열의 모든 숫자를 더하고 싶다면 `reduce`를 이렇게 사용할 수 있습니다.

let sum = numbers.reduce(0) { (결과, 숫자) in
    return 결과 + 숫자
}


- 0은 초기값 입니다.
- `{ (결과, 숫자) in 결과 + 숫자 }`는 각 숫자를 어떻게 더할지를 설명하는 규칙 입니다.

[1, 2, 3, 4, 5] 배열에서는 다음과 같이 동작합니다.
- 처음에는 0 (초기값) + 1 = 1
- 그 다음에는 1 + 2 = 3
- 그 다음에는 3 + 3 = 6
- 이런 식으로 계속 더해져서 마지막에 15 가 됩니다.


위에서 reduce 원리를 알았으니 이제 아래 코드를 살펴보면 다음과 같이 동작하는 것을 알 수 있습니다.

  • 1. $0 = 0, $1 = 1 일 때  $1 이 1이므로 0을 1 증가 시켜줍니다.
  • 2. 1에서 $0이 1 증가되었으므로 $0 = 1, $1 = 1 이므로 1을 증가 시켜줍니다.
  • 3. 2에서 $0이 1 증가되었으므로 $0 = 2, $1 = 2 이므로 그대로 유지합니다.
  • 5. 3에서 $0이 1 증가되지 않았으므로 $0 = 2, $1 = 2 이므로 그대로 유지합니다.
  • 5. 4에서 $0이 1 증가되지 않았으므로 $0 = 2, $1 = 2 이므로 그대로 유지합니다.
func solution(_ array: [Int], _ n: Int) -> Int {
    return array.reduce(0) { $1 == n ? $0 + 1 : $0 }
}

 

ytw_developer