[Codility] 5. CountDiv


[Codility] 5. CountDiv


質問リンク


CountDiv

問題の概要


差分問題.
与えられた範囲A~B(A<=B)の間の値をKで割ったときに残り0となる数の個数を求める.

要求


A and B are integers within the range [0..2,000,000,000]
K is an integer within the range [1..2,000,000,000]
A ≤ B

コード#コード#


範囲が広いのでfor-loopはすべてmeda!!!!
車の集合の概念を持って行きましょう.
よく考えてみろA...
例えば範囲が6~10 Kで2の場合….
A集合は2,4,6の3個である.
B集合は2,4,6,8105個である.
ここで,各集合の終了値と初期値の部分はAである.

AをKで割って落下->(A<=B)し、もちろんBにも含めて->交差に追加!


したがって,交差部分にAが含まれているかどうかで個数を決める!!
public func solution(_ A : Int, _ B : Int, _ K : Int) -> Int {
    var addedNum: Int = 0
    addedNum = A%K == 0 ? 1 : 0  
    return (B/K + addedNum) - A/K 
}