Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript로 특정 범위 내에서 나누어 떨어지는 숫자의 개수 구하기

문제 소개

두 개의 정수로 이루어진 범위를 첫 번째 인수로, 하나의 숫자를 두 번째 인수로 받는 JavaScript 함수를 작성해야 합니다.

이 함수는 지정된 범위 안에서 입력받은 숫자로 나누어 떨어지는 모든 수를 찾아 그 개수를 반환해야 합니다.

구현 방법

가장 직관적인 방법은 반복문을 사용하는 것입니다. 범위의 시작 값부터 끝 값까지 한 숫자씩 확인하면서, 나머지 연산자(%)를 이용해 해당 숫자로 나누어 떨어지는지 검사합니다. 나머지가 0이면 카운트를 증가시키고, 마지막에 카운트 값을 반환하면 됩니다.

예제 코드

const range = [6, 57];
const num = 3;
const findDivisibleCount = (num = 1, [l, h]) => {
    let count = 0;
    for(let i = l; i <= h; i++){
       if(i % num === 0){
          count++;
       };
   };
   return count;
};
console.log(findDivisibleCount(num, range));

실행 결과

18

코드 설명

위 예제에서 범위는 [6, 57]이며, 나누는 수는 3입니다. 6부터 57 사이에서 3으로 나누어 떨어지는 수는 총 18개입니다.

findDivisibleCount 함수는 매개변수에 기본값을 설정하고, 배열 구조 분해 할당을 통해 범위의 하한(l)과 상한(h)을 손쉽게 추출합니다. 이후 for 반복문으로 범위 내 모든 정수를 순회하며 조건에 맞는 경우만 카운트합니다.

더 효율적인 방법: 수학적 공식 활용

범위가 매우 넓다면 반복문 대신 수학적 공식을 사용하는 것이 좋습니다. 나누어 떨어지는 수의 개수는 다음과 같이 O(1) 시간 복잡도로 계산할 수 있습니다.

const findDivisibleCountFast = (num, [l, h]) => {
    return Math.floor(h / num) - Math.floor((l - 1) / num);
};
console.log(findDivisibleCountFast(3, range)); // 18

Math.floor(h / num)은 상한까지의 배수 개수를, Math.floor((l - 1) / num)은 하한 미만까지의 배수 개수를 의미합니다. 두 값을 빼면 정확히 범위 내의 배수 개수가 구해집니다. 이 방식은 반복 횟수와 무관하게 항상 일정한 성능을 보장하므로 실무에서 더 권장됩니다.