프래그래머스, 유한소수 판별하기(Python)

이도현·2023년 10월 28일
0

알고리즘 문제풀이

목록 보기
18/24

0. 문제 설명

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

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

1. 제한사항

  • a, b는 정수
  • 0 < a ≤ 1,000
  • 0 < b ≤ 1,000

2. 문제풀이

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 
  • 기약분수를 만든다.
  • 분모에 2와 5 이외의 다른 소인수가 있는 지확인
  • 분모가 1이라면 유한소수

3. 왜 2와 5만 있는 분모는 유한소수를 만드는가?

1) 10진법과 그 소인수

  • 우리가 사용하는 숫자 체계는 10진법
  • 10 = 2 * 5

2) 분수의 소수 변환

  • 분자를 분모로 나누는 것
  • 분모가 10의 구성요소인 2와 5로만 나눌 수 있다면, 나눗셈은 언제가 끝난다.
  • 왜냐하면 10진법에서 2와 5로만 나누는 것은 10의 거듭제곱으로 나누는 것 과 같기 때문

3) 유한 소수 생성

  • 예를 들어 1/4
  • 4는 2의 제곱,
  • 1/4 = 0.25

4) 반대 사례

  • 예를 들어 1/3
  • 3은 10의 소인수가 아님
  • 1/3 = 0.3333
profile
좋은 지식 나누어요

0개의 댓글