[Swift] HackerRank - Between Two Set


こんにちは:
https://www.hackerrank.com/challenges/between-two-sets/problem

問題を理解するのに少し時間がかかりましたが...最初はどういう意味だったのか...

に答える

a = [2, 4]
b = [16, 32, 96] 
結論はaの倍数と同時にbの弱い整数個数を求める問題である.
まずaの最小公倍数4を求め、次にbの最大公倍数16を求め、4と16の中間値のbを含む約数の個数を求める.
この例では、4、8、16の3つの答えが正しいので、3を返します.
(12は4の倍数ですが、16の約数ではないので正解ではありません.)
// 최대공약수 
func gcd(_ a: Int, _ b: Int) -> Int {
    if b == 0 {
        return a
    } else {
        return gcd(b, a%b)
    }
}

// 최소공배수
func lcm(_ a: Int, _ b: Int) -> Int {
    return a * b / gcd(a, b)
}

func getTotalX(a: [Int], b: [Int]) -> Int {
    // Write your code here
    var lcmNumber: Int = a.count > 1 ? lcm(a[0], a[1]) : a[0]
    var gcdNumber: Int = b.count > 1 ? gcd(b[0], b[1]) : b[0]
    
    if a.count > 2 {
       for idx in 2..<a.count {
        lcmNumber = lcm(a[idx], lcmNumber)
    } 
    }
    if b.count > 2 {
       for idx in 2..<b.count {
        gcdNumber = gcd(b[idx], gcdNumber)
    } 
    }
    
    var now: Int = lcmNumber
    var ans = 0
    while now <= gcdNumber {
        var check: Bool = true
        for number in b {
            if number % now != 0 {
                check = false
                break
            }
        }
        
        if check {
            ans += 1
        }
        now += lcmNumber
    }
    
    return ans
}