문제
내 풀이
function getGCD(a, b) {
let gcd = 1;
if(a % b === 0) gcd = b;
else if(b % a === 0) gcd = a;
else{
for(let i = 2; i <= Math.min(a, b); i++){
if(a % i === 0 && b % i === 0) gcd = i;
}
}
return gcd;
}
function solution(arr) {
while(arr.length !== 1){
let a = arr.shift();
let b = arr.shift();
let gcd = getGCD(a, b);
if(gcd === 1) arr.push(a * b);
else arr.push(a * b / gcd);
}
return arr.shift();
}
arr의 앞에서 부터 두 개씩 최소공배수를 구하는 방식으로 구현했다. 이때, 최소공배수는 두 수의 최대공약수를 활용하여 구하도록 했다. 소인수분해를 생각하면 쉽다.