알고리즘/Python

[Python | 프로그래머스] 유한소수 판별하기

i'mMolly 2023. 4. 24. 22:57

https://school.programmers.co.kr/learn/courses/30/lessons/120878

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제

소수점 아래 숫자가 계속되지 않고 유한개인 소수를 유한소수라고 합니다. 분수를 소수로 고칠 때 유한소수로 나타낼 수 있는 분수인지 판별하려고 합니다. 유한소수가 되기 위한 분수의 조건은 다음과 같습니다.

기약분수로 나타내었을 때, 분모의 소인수가 2와 5만 존재해야 합니다.
두 정수 a와 b가 매개변수로 주어질 때, a/b가 유한소수이면 1을, 무한소수라면 2를 return하도록 solution 함수를 완성해주세요.

 

제출 답안

def solution(a, b):
    answer = 0
    bunmo = makeSmall(a,b)

    return suso(bunmo)

def makeSmall(a,b):
    c = min(a,b)
    for i in range(1,c+1):
        if a%i==0 and b%i==0:
            c = i  
    return b//c

def suso(bunmo):
    while bunmo%2==0:
        bunmo = bunmo//2
    while bunmo%5==0:
        bunmo = bunmo//5
    if bunmo==1:
        return 1
    else:
        return 2

 

개선 답안

최대공약수 함수: gcd()

from math import gcd
def solution(a, b):
    b //= gcd(a,b)
    while b%2==0:
        b//=2
    while b%5==0:
        b//=5
    return 1 if b==1 else 2

 

 

참고 자료

https://school.programmers.co.kr/learn/courses/30/lessons/120878/solution_groups?language=python3 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr