https://school.programmers.co.kr/learn/courses/30/lessons/12953
function solution(arr) {
let answer = 1;
let totalArr = [];
for (let i = 0; i < arr.length; i++) {
let n = arr[i];
let divideArr = [];
// 2로 나눠지면 계속 나누기
while (n % 2 === 0) {
divideArr.push(2);
n /= 2;
}
// 3부터 루트n까지 나눌 수 있으면 나누기
// 이제 n은 홀수 -> 이미 2의 배수를 판별했기때문에 2씩 증가시킬 수 있음
for (let i = 3; i * i <= n; i += 2) {
while (n % i === 0) {
divideArr.push(i);
n /= i;
}
}
// 루트n부터 n까지 소수인 경우 처리
if (n > 2) divideArr.push(n);
for (let i = 0; i < totalArr.length; i++) {
for (let j = 0; j < totalArr[i].length; j++) {
const findIndex = divideArr.indexOf(totalArr[i][j]);
if (findIndex > -1) {
divideArr.splice(findIndex, 1);
}
}
}
for (let i = 0; i < divideArr.length; i++) {
answer *= divideArr[i];
}
totalArr.push(divideArr);
}
return answer;
}