from math import gcd    # gcd 함수는 최대 공약수를 구할 때 쓴다.
def solution(a, b):
    # 최대 공약수 구하기
    b //= gcd(a,b)      # a와 b의 최대 공약수를 분모가 될 b에 몫으로 계산한 값을 반환
    
    while b % 2 == 0:   # 기약분수일 때 분모가 2의 배수인 경우
        b //= 2         # 소수점을 날리기 위해서 몫 계산식으로 바꿀 거라고 정의함
        
    while b % 5 == 0:   # 기약분수일 때 분모가 5의 배수인 경우
        b //= 5         # 소수점을 날리기 위해서 몫 계산식으로 바꿀 거라고 정의함
        
    return 1 if b == 1 else 2   # 나머지에 다시 몫으로 계산한 값이 2와 5의 배수였으면 b는 1을 반환하게 됨.
                                # b값이 2와 5의 배수였다면 유한소수, 아니었으면 무한소수임.

 

🤔 문제 풀이

  • 문제를 읽자마자 b값이 2와 5의 최대 공약수이거나 배수이면 유한소수겠구나 싶었어요
  • from math import gcd
    • b //= gcd(a,b)
    • 최대 공약수는 math에서 gcd 함수를 불러와서 해결해주었어요
  •  while b % 2 == 0:
            b //= 2 
    • 2의 배수를 찾아내서 그 값들은 소수점을 버리고 몫만 챙기겠다고 정의했어요
    • 유한소수이기 때문에 몫만 챙겨가면 되거든요
  •  while b % 5 == 0: 
            b //= 5 
    • 5의 배수일 경우에도 마찬가지로 해주었어요
  • return 1 if b == 1 else 2
    • 마무리로 삼항 연산자로 정리해 주었어요
    • b == 1일 경우가 2와 5의 배수여서 나누어 떨어졌음을 의미해요
      • 이 경우일 경우 유한소수이기 때문에 1로 출력되게 하고, 아닐 경우 2로 출력하게 하면, 문제 해결

+ Recent posts