//최대공약수 구하기
const gcd = (a, b) => {
while (b > 0) {
let temp = b;
b = a % b;
a = temp;
}
return a;
};
//최소공배수 구하기
const lcm = (a, b) => {
return (a * b) / gcd(a, b);
};
const solution = (arr) => {
let answer = 1;
for (let i = 0; i < arr.length; i++) {
answer = lcm(answer, arr[i]);
}
return answer;
};
두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배수는 n 개의 수들의 배수 중 공통이 되는 가장 작은 숫자가 됩니다. n개의 숫자를 담은 배열 arr이 입력되었을 때 이 수들의 최소공배수를 반환하는 함수, solution을 완성해 주세요.
이 문제는 N개의 최소공배수를 구하는 문제입니다. N개의 수(1,2, … , N) 가 있다고 가정하였을 때, 먼저 1번째 수와 2번째 수의 최소공배수를 구하고, 구한 최소공배수와 3번째 수의 최소공배수를 구합니다
. 이런식으로 N개까지 최소공배수를 구하면 그 수가 N개의 공통 최소공배수가 됩니다.
그렇다면 최소공배수는 어떻게 구해야하는가? 에 대한 답은 바로 유클리드 호제법 을 이용하는 것입니다.
유클리드 호제법은 최대공약수를 구하는 알고리즘 중의 하나입니다. 따라서 유클리드 호제법을 이용하여 최대공약수를 구하고 최소공배수는 두수의 곱 / 최대공약수
이므로 이를 이용하여 문제를 해결할 수 있습니다.