Programmers_LV0_유한소수 판별하기

jkky98·2023년 2월 8일
0

CodingTraining

목록 보기
12/61


먼저 분수를 기약분수로 나누기위해 분자와 분모간의 최대공약수를 구해야한다. 최대공약수는 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
        
profile
자바집사의 거북이 수련법

0개의 댓글