먼저 분수를 기약분수로 나누기위해 분자와 분모간의 최대공약수를 구해야한다. 최대공약수는 def max_gong으로 하여금 따로 구하였으며, 이를 통해 분자와 분모에 최대공약수를 나누어 기약분수형태로 나타낼 수 있었으며, 그 후 유한소수이기 위한 조건인 기약분수의 분모의 소인수가 2와 5뿐임을 증명하면 됬다. 증명방법은, 기약분수의 분모에 2와 5를 계속 나누어줄 때 나누어 떨어진다면 while문을 통해 계속 나누어준다. 그 사이에 count변수로 반복횟수를 측정하였는데, 제한사항에 b는 1000이하로 셋팅되어있기 때문에 2^10 즉 2가 10번이상 나누어질 수 없을 파악하여, count가 10이상 되면 그냥 무한소수로 리턴하였고, count가 1이상이면서, 분모가 계속 나누어져 1이 될 수 있을 때 유한소수임을 리턴하였다.
def max_gong(a, b):
a_list = []
b_list = []
f_list = []
for i in range(1,a+1):
if a % i == 0:
a_list.append(i)
for j in range(1,b+1):
if b % j == 0:
b_list.append(j)
for i in a_list:
if i in b_list:
f_list.append(i)
return max(f_list)
def solution(a, b):
max_cd = max_gong(a,b)
denomi = b / max_cd
count = 0
while denomi !=0:
count += 1
if count > 10:
return 2
if denomi % 2 == 0:
denomi /= 2
elif denomi % 5 == 0:
denomi /= 5
if count>1 and denomi == 1:
return 1