IT/Algorithm

코딜리티(Codility) Lesson4 CountDiv 문제풀기

차가운남자 2021. 5. 27. 16:34

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, K가 주어지면 [A..B] 범위 내에서 K로 나눌 수 있는 정수의 수를 return 하라는 문제.

첫번째 시도 : 0%

function solution(A, B, K) {
    let result = 0;

    for(let i = A; i <= B; i++) {
        if( i % K === 0 ) result++; 
    }

    return result;
}

 

5번정도 시도 후: 100%

 function solution(A, B, K) {
    let result = parseInt(B/K) - parseInt(A/K);

    if(A % K === 0) result += 1;

    return result    
}

 

처음의 시도의 for문으로 무식한 방법을 사용이 좋지는 않다....

왜  나는 parseInt(B / K) - parseInt(A / K) 를 생각을 못했을까?????

math.floor로 먼저 적용을 하다가 남의 코드를 보고 parseInt를 보게 되었고

math.floor !== parseInt 에 대해서 체크 하게 되었다. 

조건을  잘 생각해야된다.

쉽지 않다....