두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배수는 n 개의 수들의 배수 중 공통이 되는 가장 작은 숫자가 됩니다. n개의 숫자를 담은 배열 arr이 입력되었을 때 이 수들의 최소공배수를 반환하는 함수, solution을 완성해 주세요.
arr은 길이 1이상, 15이하인 배열입니다.
arr의 원소는 100 이하인 자연수입니다.
function maxP(a,b){ //최대공약수 구하는 함수
let answer = 1;
for(let i=2; i<=a; i++){ //a가 b보다 작으니, a까지만 확인하면 된다.
if(a%i === 0 && b%i===0) answer = i
//a랑 b모두 나눠지는 수가 최대공약수가 된다.
}
return answer;
}
function solution(arr) { //배열 안 모든 수의 최소공배수 구하는 함수
let answer = arr[0];
arr.sort((a,b)=> a-b) // 오름차순 정렬
for(let i=1; i<arr.length; i++){
let share = maxP(answer, arr[i]); // 앞 두 수로 최대공약수를 구한다.
answer = parseInt(answer/share) * parseInt(arr[i]/share) * share;
//최소공배수는 두 수를 최대공약수로 나눈 몫 두개와 최대공약수를 곱한 수가 된다.
}
return answer;
}
최대공약수랑, 최소공배수 구하는건 간단하게 공식처럼 암기하자
function gcd(a,b){ //최대공약수 구하는 법
return a%b ? gcd(b, a%b): b
}
function nlcm(arr){ //배열 안 최소공배수 구하는 법
return arr.reduce((a,b)=> a*b / gcd(a,b))
}