258. CountDiv

아현·2021년 8월 14일
0

Algorithm

목록 보기
270/400



1. JavaScript


정해


function solution(A, B, K) {
    let cnt = parseInt(B / K) - parseInt(A / K);
    if(A % K === 0) cnt += 1;
    return cnt;
}
  • 어떤 구간을 K마다 자르면 완전한 subarray에는 반드시 1개의 K의 배수가 존재한다는 특성을 이용한다.

    • 즉 주어진 구간의 길이를 K로 나눠서 마지막에 남는 나머지가 있다면 그 나머지 안에 K의 배수가 있는지만 검사해서 리턴하면 되는 방식이다.

브루트 포스 (50%)



// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');

function solution(A, B, K) {
    // write your code in JavaScript (Node.js 8.9.4)

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

    return count
}



2. Python



# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")

def solution(A, B, K):
    # write your code in Python 3.6
    len_AB = B + 1 - A

    if len_AB < K:
        for n in range(A, B + 1):
            if n % K == 0:
                return 1

    div, mod = divmod(len_AB, K)
    # last chunk
    for n in range(A + div * K, B + 1):
        if n % K == 0:
            return div + 1
    return div
    
    
  • 우선은 A와 B 사이에 K의 배수가 하나도 없을 경우가 있기 때문에 B + 1 - AK보다 작은 경우 따로 계산

  • 그 다음은 B와 A사이의 거리를 K로 나누어서 나머지가 있는 경우 나머지에서 K의 배수를 찾아주고 아니면 그냥 몫을 리턴한다.

profile
For the sake of someone who studies computer science

0개의 댓글