본문 바로가기
알고리즘/Codility

[Codility] Count Divs (JavaScript)

by devpine 2025. 6. 14.
반응형

https://app.codility.com/programmers/lessons/5-prefix_sums/count_div/

 

CountDiv coding task - Learn to Code - Codility

Compute number of integers divisible by k in range [a..b].

app.codility.com

 

문제:
A부터 B 사이의 수 중 i로 K를 나누었을 때, 0인 숫자의 개수를 반환한다.

내 풀이:

function solution(A, B, K) {
    let count = 0;
    for (let i = A; i <= B; i++) {
        if (i % K === 0) {
            count++;
        }
    }
    return count;
}

- 채점결과: 50%

분석:
정확도는 성공, 효율성에서 큰 수가 들어올 경우 모두 타임아웃 에러 발생
Performance tests
▶ big_values
A = 100, B=123M+, K=2 ✘TIMEOUT ERROR
running time: 0.282 sec., time limit: 0.162 sec.
▶ big_values2
A = 101, B = 123M+, K = 10K ✘TIMEOUT ERROR
running time: 0.805 sec., time limit: 0.160 sec.
▶ big_values3
A = 0, B = MAXINT, K in {1,MAXINT} ✘TIMEOUT ERROR
running time: 4.442 sec., time limit: 0.160 sec.
▶ big_values4
A, B, K in {1,MAXINT} ✘TIMEOUT ERROR
running time: 4.449 sec., time limit: 0.159 sec

원인
단순하게 로직 구현만 생각하면 간단한데, 효율성을 생각하려면 반복문을 도는 범위가 줄어야 한다.
A 이상 B 이하 중 K로 나눠지는 수 = B 이하의 K의 배수 개수 - A보다 작은 수 중 K의 배수 개수

수정 풀이:

function solution(A, B, K) {
    return Math.floor(B / K) - Math.floor((A - 1) / K);
}

채점결과: 100%

반응형

댓글