프로그래머스 | 유한소수 판별하기 [파이썬 python]

2023. 3. 15. 20:49·Algorithm/프로그래머스
 

코딩테스트 연습 - 유한소수 판별하기

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

school.programmers.co.kr

 

코드

import math

def solution(a, b):
    gcd = math.gcd(a, b) # 분모, 분자의 최대공약수를 구해 b를 최대공약수로 나눔
    b //= gcd
    
    num = [] # 소인수 저장
    i = 2
    while i <= b: # 소인수 구하기
        if b % i == 0:
            b //= i
            num.append(i)
        else:
            i += 1
    
    if all(i in [2,5] for i in num): # 소인수가 2와 5만 존재하면 유한소수 그렇징 않으면 무한소수
        return 1
    return 2

a, b값이 주어질 때, $\frac{a}{b}$ 를 기약분수로 만들어 유한소수인지 판별하는 문제이다.

유한소수가 되려면 분모의 소인수가 2와 5로만 구성되어 있어야 한다.

 

기약분수로 만들기 위해 a, b의 최대공약수를 구해 b를 최대공약수로 나누어 다시 b에 저장한다.

코드에서 a에 대해서는 작성하지 않은 이유는 문제에서 유한소수가 되기 위한 조건으로 분모에 대해 알려주었기 때문에 분자에 대해서는 신경 쓸 필요가 없다.

 

이제 b의 소인수가 2와 5 뿐인지 확인한다.

소인수를 구하는 방법을 그대로 사용해, 소인수를 num이라는 리스트에 저장하였다.

 

num의 모든 요소가 2와 5로만 구성되어 있는지 if문을 통해 확인한다.

이때 "모든" 요소가 2와 5로만 구성되어야 하기 때문에 all을 사용하여 모든 경우가 참인지 확인하는 것이다. 

* 만약 하나라도 2와 5이면 된다는 조건이라면 any를 사용한다.

 

저작자표시 (새창열림)
'Algorithm/프로그래머스' 카테고리의 다른 글
  • 프로그래머스 | 등수 매기기 [파이썬 python]
  • 프로그래머스 | 특이한 정렬 [파이썬 python]
  • 프로그래머스 | 겹치는 선분의 길이 [파이썬 python]
  • 프로그래머스 | 평행 [파이썬 python]
dduniverse
dduniverse
  • dduniverse
    dduniverse
    dduniverse
  • 전체
    오늘
    어제
    • 분류 전체보기 (243)
      • Algorithm (123)
        • 알고리즘 이론 (8)
        • 백준 (19)
        • 프로그래머스 (83)
        • 구름 알고리즘 먼데이 챌린지 (13)
      • 빅데이터분석기사 (10)
        • 통계 (4)
        • 실기 (6)
      • KT에이블스쿨 (26)
      • FrontEnd (11)
        • React (5)
        • 기타 (6)
      • BackEnd (18)
        • Django (15)
        • Spring (3)
      • DS & ML (11)
        • Machine Learning (9)
        • Kaggle (2)
      • TIL (44)
        • python (22)
        • javascript (3)
        • 오류해결 (10)
        • 기타 (8)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 관리
    • 글쓰기
  • 링크

  • 인기 글

  • hELLO· Designed By정상우.v4.10.0
dduniverse
프로그래머스 | 유한소수 판별하기 [파이썬 python]
상단으로

티스토리툴바