숫자 하나를 입력받아, 1부터 n까지의 모든 자연수로 나누어 떨어지는 가장 작은 수를 찾는 JavaScript 함수를 작성해 보겠습니다.
예를 들어 다음과 같습니다.
- n = 4일 경우, 결과값은 12입니다.
- 12는 1, 2, 3, 4 모든 수로 나누어 떨어지는 가장 작은 수이기 때문입니다.
구현 코드
const smallestMultiple = num => {
let res = 0;
let i = 1;
let found = false;
while (found === false) {
res += num;
while (res % i === 0 && i <= num) {
if (i === num) {
found = true;
};
i++;
};
i = 1;
};
return res;
};
console.log(smallestMultiple(2));
console.log(smallestMultiple(4));
console.log(smallestMultiple(12));
console.log(smallestMultiple(15));실행 결과
위 코드를 실행하면 콘솔에 다음과 같이 출력됩니다.
2
12
27720
360360
코드 동작 원리
이 알고리즘은 입력값 num의 배수를 하나씩 늘려가며, 해당 값이 1부터 num까지의 모든 수로 나누어 떨어지는지 검사합니다. 조건을 만족하는 첫 번째 수를 찾으면 반복을 종료하고 그 값을 반환합니다.
수학적으로 이 문제는 1부터 n까지 자연수들의 최소공배수(LCM)를 구하는 것과 동일합니다. 위 방식은 직관적이고 이해하기 쉽지만, n이 커질수록 반복 횟수가 급격히 늘어나 비효율적일 수 있습니다. 따라서 성능이 중요한 경우에는 유클리드 호제법(GCD)을 활용해 최소공배수를 계산하는 방식을 고려하는 것이 좋습니다.