[프로그래머스][파이썬] 유한소수 판별하기 - 수학 (Level 0)

뻥튀기아이스크림·2025년 3월 28일
1
post-thumbnail

◽ 문제 출처

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

◽ 문제

◽ 입력 & 출력

◽ 내 풀이

import math

def solution(a, b):
    # a와 b의 최대공약수를 구하여 약분
    b //= math.gcd(a, b)
    
    # 분모 b의 소인수가 2와 5만 있는지 확인
    while b % 2 == 0:
        b //= 2
    while b % 5 == 0:
        b //= 5
    
    # 최종적으로 b가 1이면 유한소수, 그렇지 않으면 무한소수
    return 1 if b == 1 else 2
  • 유한소수의 조건이 분모의 소인수가 25 만 존재해야하므로 분자는 납두고 분모만 따로 빼서 풀이했다.
  • 기약분수를 편리하게 만들기 위해 math.gcd() 함수를 사용하여 최대공약수로 한 번에 약분했다.
  • 두 개의 반복문을 통해 만든 b 값이 1 이면 소인수가 25 만 존재하여 나누었을 때 1 이 된다는 뜻이니까 유한소수인 1 반환하고, 1이 아니면 무한소수인 2를 반환했다.

◽ 다른 사람 풀이

import math

def solution(a, b):
    b //= math.gcd(a, b)

    # 분모에서 2와 5를 나눠 없애기
    for p in [2, 5]:
        while b % p == 0:
            b //= p

    # 남은 수가 1이면 유한소수
    return 1 if b == 1 else 2
  • while 문을 두개로 나누기보단 [2, 5] 에서 하나씩 꺼내서 나누어주는 방식이다.

◽ 더 나아가기

  • 유한소수는 순환소수의 반대로 순환소수가 아닐 때 등장한다.



피드백은 언제나 환영입니다 :)

profile
성장하고 싶은 개발자

0개의 댓글