[iOS / Swift] 등차수열의 특정한 항만 더하기

justdotheg·2024년 2월 21일

문제

내 풀이

import Foundation

func solution(_ a:Int, _ d:Int, _ included:[Bool]) -> Int {
    
    var answer: Int = 0
    for i in 1 ... included.count {
        if included[i-1] == true {
            answer += (d*(i-1) + a)        
        }
    }
        
    return answer    
}

최적화 풀이

func solution(_ a: Int, _ d: Int, _ included: [Bool]) -> Int {
    return included.indices.filter { included[$0] }.map { a + d * $0 }.reduce(0, +)
}

요약

included.indices.filter { included[$0] })

위 코드가 included 배열에서 true인 인덱스만 추리는 코드이다.
고차함수 filter는 원하는 요소만 배열에서 추리는 함수이다.


included.indices.filter { included[$0] }).map { a + d * $0 }

map 고차함수를 이어서 작성하면 included에서 true인 인덱스가 $0에 들어가 included 배열은 a + d * $0인 요소들로 바뀐다.


included.indices.filter { included[$0] }).map { a + d * $0 }.reduce(0, +)

reduce 고차함수를 이어서 작성하면 초기값 0에 배열의 요소들을 모두 더해서 한개의 요소로 축소시킨다.

0개의 댓글