Prefix Sums - CountDiv

-·2022년 7월 3일
0
int answer = 0;
for(int i = A; i <= B; i++){
    if(i % K == 0) answer++;
}
return answer;

역시 쉬운방법은 퍼포먼스에서 탈락함...

이건 분명히 식을 세워서 해야될껀데 내가 줏어들은 기억은 있는데 정확하지 않아서 찾아봄

그리고 답을 찾아보니까 내가 문제 해석도 못했네

결국에 해석하면 K의 배수를 찾으라는건데 0~A 의 배수의 갯수는 A / K + 1

A도 포함된 결과이기때문에 빼기 할 때 (A - 1) / K + 1 이렇게 식을 세워야됨

그러면 A ~ B까지 K 배수를 찾으라는건데(B / K +1) - ((A - 1) / K + 1)가 결과 +1은 서로 상쇄되서 빼기

if (A == 0)
    return B / K + 1;
else
    return B / K - (A - 1) / K;

결은 똑같은데 (B / K) - (A / K) 이렇게 식을 세웠기 때문에 예외 시킬께 다름

if(A % K == 0) answer += 1;
이 조건으로 A가 0일때 A도 개수에 포함시켜야 할 때 다 거를수있음

int answer = (B / K) - (A / K);
if(A % K == 0) answer += 1;
return answer;

별차이는 안나겠지만

나누기를 1번만 해도 되는 경우를 따져주기 때문에 1번째가 더 효율은 좋을듯?

profile
거북이는 오늘도 걷는다

0개의 댓글