두 개의 숫자 a와 b가 담긴 배열을 인자로 받아, [a, b] 범위에 포함된 모든 정수의 최소공배수(Least Common Multiple, LCM)를 반환하는 함수를 작성해 보겠습니다.
접근 방법
먼저 두 숫자의 최소공배수를 계산하는 기본 함수를 작성합니다. 이 함수가 준비되면 [a, b] 범위 안의 각 숫자에 대해 재귀적으로 호출하면서 결과를 누적하고, 범위의 끝에 도달하면 최종 값을 반환하는 방식으로 문제를 해결할 수 있습니다.
예제 코드
const lcm = (a, b) => {
let min = Math.min(a, b);
while(min >= 2){
if(a % min === 0 && b % min === 0){
return (a*b)/min;
};
min--;
};
return (a*b);
};
const leastCommonMultipleInRange = (arr, len = arr[0], res = 1) => {
if(len <= arr[1]){
return leastCommonMultipleInRange(arr, len+1, lcm(res, len));
};
return res;
};
console.log(leastCommonMultipleInRange([6, 8]));
console.log(leastCommonMultipleInRange([6, 18]));
console.log(leastCommonMultipleInRange([1, 8]));
console.log(leastCommonMultipleInRange([10, 25]));
코드 설명
lcm 함수: 두 수 중 작은 값부터 시작해 1씩 감소시키며 두 수를 모두 나누어 떨어지게 하는 가장 큰 공약수(GCD)를 찾습니다. 공약수를 찾으면 두 수의 곱을 공약수로 나눈 값, 즉 최소공배수를 반환합니다. 2 이상의 공약수가 없다면 두 수는 서로소이므로 두 수의 곱 자체가 최소공배수가 됩니다.
leastCommonMultipleInRange 함수: 매개변수 len을 범위의 시작 숫자로 초기화하고, res에는 현재까지 누적된 최소공배수를 저장합니다. len이 범위의 끝 숫자에 도달할 때까지 1씩 증가시키며 재귀 호출을 반복해 각 숫자와의 최소공배수를 차례로 계산한 뒤, 최종 결과를 반환합니다.
실행 결과
콘솔에는 아래와 같이 출력됩니다.
168 12252240 840 26771144400