[Algorithm] 프로그래머스 약수의 개수와 덧셈

Updated:

문제 설명

15

나의 풀이

import Foundation
func solution(_ left:Int, _ right:Int) -> Int {
    var answer: Int = 0
    for num in left...right {
        if countDivisor(num) % 2 == 0 {
            answer += num
        }
        else {
            answer -= num
        }
    }
    return answer
}

func countDivisor(_ num: Int) -> Int {
    let sqrtNum = Double(num).squareRoot()
    var intSqrtNum = Int(sqrtNum)
    var divisors: Set<Int> = []
    
    for i in 1...intSqrtNum+1 {
        if num % i == 0 {
            divisors.insert(num/i)
            divisors.insert(i)
        }
    }
    return divisors.count
}

괜찮은 남의 풀이

func solution(_ left: Int, _ right: Int) -> Int {
    return (left...right).map { i in (1...i).filter { i % $0 == 0 }.count % 2 == 0 ? i : -i }.reduce(0, +)
}

left부터 right 까지 1부터 i까지 i를 나눠서 0이 되는 수를 카운트하고 짝수인지 음수인지 확인해서 누적합하는 것을 한 번에 쓴 풀이..

참고

Programmers

Leave a comment