풀이 1
public func solution(_ A : Int, _ B : Int, _ K : Int) -> Int {
var largestDivisibleNumber = -1, smallestDivisibleNumber = -1
for i in stride(from: A, through: B, by: 1) where i % K == 0 {
smallestDivisibleNumber = i
break
}
for i in stride(from: B, through: A, by: -1) where i % K == 0 {
largestDivisibleNumber = i
break
}
guard largestDivisibleNumber != -1 && smallestDivisibleNumber != -1 else {
return 0
}
return (largestDivisibleNumber - smallestDivisibleNumber) / K + 1
}
A에서 B까지 K로 나누어 0으로 떨어지는 가장 큰 수와 가장 작은 수를 찾는다.
큰 수에서 작은 수를 뺀 값을 K로 나누고 1을 더한 값이 A부터 B까지 K로 나눴을 때 나머지가 0인 숫자의 갯수가 된다.
만약 K로 나누어 떨어지는 가장 큰 수 와 작은 수를 찾지 못한 경우 예외처리가 필요하다.
풀이 2
public func solution(_ A : Int, _ B : Int, _ K : Int) -> Int {
let bCount = B/K
let aCount = A/K
let result = bCount - aCount
return A % K == 0 ? result + 1 : result
}
A와 B를 각각 K로 나눈 후 두 값의 차이는 A와 B사이의 K로 나누어 떨어지는 수의 개수와 같다. 단, A가 K로 나누어 떨어지는 경우 이 숫자를 범위에 포함해야하기 때문에 결과값에 1을 더하여 반환한다.