
https://school.programmers.co.kr/learn/courses/30/lessons/120878
function solution(a, b) {
let gcd = Math.min(a, b);
while (gcd >= 1) {
if (!(a % gcd || b % gcd)) {
break;
}
gcd--;
}
b /= gcd;
while (!(b % 5 && b % 2)) {
b = !(b % 5) ? b / 5 : b / 2;
}
return b === 1 ? 1 : 2;
}
✔ a(분자)와 b(분모) 모두 나뉘어질 수 있는 최댓값을 gcd로 설정
✔ gcd로 나눈 b(분모)가 5나 2로 더 이상 나뉘어지지 않을 때까지 계속해서 5와 2로 나눔
✔ b가 1이라면 분모의 소인수가 5와 2만 존재한다는 뜻이기 때문에 유한소수로 판별됨
function solution(a, b) {
return Number((a/b).toFixed(10)) === a/b ? 1 : 2;
}
✔ toFixed(10)를 통해 소수 10번째 자리까지 표현
✔ 보통 소수 10번째 자리를 넘어가는 경우는 무한소수일 확률이 대부분이기 때문에 위의 결과가 false가 나올 것이다.