class Solution {
public int solution(int a, int b) {
int bottom = b / gcd(a, b);
while (bottom != 1) {
if (bottom % 2 == 0) bottom /= 2;
else if (bottom % 5 == 0) bottom /= 5;
else return 2;
}
return 1;
}
static int gcd(int a, int b) {
if (a < b) {
int temp = a;
a = b;
b = temp;
}
if (b == 0) return a;
return gcd(b, (a % b));
}
}
유한소수를 판별하기에 앞서 입력받은 분수가 기약분수의 형태를 갖추어야 한다.
기약분수란 더 이상 약분될 수 없는 분수를 뜻한다.
분자와 분모의 최소공배수를 구해 그 수로 나누어주게되면 기약분수를 만들 수 있다.
최소공배수를 구해 새로운 분모인 bottom
을 만들어 준다.
이 때 유한소수인지 판별하기 위해서 분자는 필요하지않으므로 생성하지않았다.
유한소수는 분모의 소인수 (소수이면서 약수인 수)가 2 또는 5인 경우에만 가능하다.
while문을 통해 2, 5로 나누어 떨어지는 경우 각각의 수로 나누어주어 분모의 소인수가 2또는 5로만 구성되어있는지 확인해주도록 구현하였다.