Write a function:
function solution(A, B, K);
that, given three integers A, B and K, returns the number of integers within the range [A..B] that are divisible by K, i.e.:
{ i : A ≤ i ≤ B, i mod K = 0 }
For example, for A = 6, B = 11 and K = 2, your function should return 3, because there are three numbers divisible by 2 within the range [6..11], namely 6, 8 and 10.
Write an efficient algorithm for the following assumptions:
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.
A와 B는 정수로 주어지고 A와 B 사이의 숫자 중 K로 나눠지는 수의 갯수를 구하는 문제이다. 이 문제 또한 효율성을 고려해야하는 문제이고 웬만하면 O(N)으로 문제가 해결 될 수 있도록 하는 것이 좋다.
효율성을 고려해야 함으로 최대한 반복문이 덜 돌아가도록 해야한다.
반복문 시작은 A보다 크거나 같고 K로 나눠지는 가장 작은 수로 지정해야한다. 그리고 반복문은 K만큼 더해서 B까지 도달해야 한다.
function solution(A, B, K) {
let answer = 0;
let aNum = A < K && A%K===0 ? A : A < K && A%K!==0 ? K : A > K && A%K===0 ? A : K*Math.ceil(A/K)
if(K===1) return answer = (B-A)+1
if(A===B && A%K===0) return answer = 1
for(let i = aNum; i<=B; i+=K){
answer++
}
return answer
}