두 개의 숫자를 인자로 받아 해당 숫자들의 최소 공배수(Least Common Multiple)를 반환하는 함수를 작성해야 합니다.
최소 공배수(LCM)란?
두 숫자 a와 b의 최소 공배수란, a와 b 모두로 나누어 떨어지는 가장 작은 양의 정수를 의미합니다.
예를 들어, 6과 8의 최소 공배수는 24입니다. 24가 6과 8 모두로 나누어 떨어지는 가장 작은 양의 정수이기 때문입니다.
LCM을 계산하는 방법
두 숫자 a와 b의 LCM을 구하는 여러 가지 방법 중 하나는, a와 b의 곱을 두 숫자 모두를 나눌 수 있는 가장 큰 정수, 즉 최대 공약수(GCD, Greatest Common Divisor)로 나누는 것입니다.
6과 8의 경우를 살펴보면, 두 숫자의 곱은 48이고 두 숫자 모두를 나누는 가장 큰 정수는 2입니다. 따라서 LCM은 다음과 같이 계산됩니다.
(6*8)/2 = 24
개념이 명확해졌으니 이제 실제 코드 작성으로 넘어가 보겠습니다.
예제 코드
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);
};
console.log(lcm(6, 8));
console.log(lcm(16, 18));
console.log(lcm(0, 8));
console.log(lcm(11, 28));
console.log(lcm(18, 34));코드 동작 원리 이해하기
두 숫자를 모두 나누는 가장 큰 정수는 항상 두 숫자 중 더 작은 값보다 작거나 같습니다. 따라서 우리는 두 숫자 중 작은 값부터 시작하여 2까지 감소하는 루프를 실행합니다.
반복 과정에서 두 숫자를 모두 나눌 수 있는 값을 발견하면, 감소하는 루프를 사용하고 있기 때문에 그 값이 두 숫자를 모두 나누는 가장 큰 수임을 보장할 수 있습니다. 따라서 즉시 그 값을 이용해 LCM을 계산하여 반환합니다.
만약 루프를 끝까지 돌았다면, 그런 수를 찾지 못했다는 의미입니다. 이 경우 1만이 두 숫자를 모두 나눌 수 있는 유일한 수이며, 즉 두 숫자는 서로소(co-prime) 관계입니다. 따라서 단순히 두 숫자의 곱을 반환합니다.
출력 결과
콘솔에 출력되는 결과는 다음과 같습니다.
24 144 0 308 306