[프로그래머스 LV.0] 유한소수 판별하기 — Python 정답 & 해설

2026. 6. 13. 23:49·코딩테스트/알고리즘

🔗 1. 문제 URL

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

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 


 

📝 2. 문제 요구사항 정리

두 정수 a와 b가 주어졌을 때, 분수 a / b가 유한소수로 표현될 수 있는지 판별하는 문제입니다. 유한소수라면 1을, 무한소수라면 2를 반환해야 합니다.

  • 핵심 조건: 기약분수로 만들었을 때 분모의 소인수가 2와 5만 남아야 유한소수입니다.
  • 약분 처리: a와 b의 최대공약수로 b를 나누어 기약분수의 분모를 구합니다.
  • 반환값: 분모에서 2와 5를 모두 제거한 뒤 1이 남으면 1, 다른 값이 남으면 2를 반환합니다.

 


 

💡 3. 핵심 개념

✔ 1) 최대공약수로 기약분수 만들기

유한소수 여부는 원래 분모가 아니라 기약분수로 바꾼 뒤의 분모를 기준으로 판단해야 합니다. 따라서 math.gcd(a, b)를 이용해 a와 b의 최대공약수를 구하고, b를 그 값으로 나누어 약분된 분모 n을 만듭니다.

✔ 2) 유한소수의 분모 조건 이해하기

어떤 분수가 유한소수가 되려면 기약분수의 분모가 2와 5만을 소인수로 가져야 합니다. 10이 2 × 5로 이루어져 있기 때문에, 분모를 10의 거듭제곱 형태로 만들 수 있는 경우에만 소수점 아래가 유한하게 끝납니다.

✔ 3) 2와 5를 반복해서 제거하기

약분된 분모 n에서 2로 나누어떨어지는 동안 계속 2를 제거하고, 5로 나누어떨어지는 동안 계속 5를 제거합니다. 이 과정을 마친 뒤 n이 1이면 2와 5 외의 소인수가 없다는 뜻이므로 유한소수입니다.

 


 

✅ 4. 정답 Python 코드

import math 

def solution(a, b):
    ## 유한소수면 1, 아니면 2
    gcd_num = math.gcd(a, b)
    n = b // gcd_num
    
    while n % 2 == 0:
        n //= 2
        
    while n % 5 == 0:
        n //= 5
    
    return 1 if n ==1 else 2

 


 

💬 5. 풀이하면서 느낀 점

처음에는 분모에 2와 5만 있는지 확인하면 된다고 단순하게 생각할 수 있는데, 풀이를 정리하다 보니 먼저 기약분수로 약분하는 과정이 핵심이라는 점을 떠올릴 수 있었습니다. 분모가 처음에는 복잡해 보여도 약분하고 나면 유한소수 조건을 만족할 수 있기 때문입니다.

그래서 최대공약수로 분모를 줄인 뒤, 남은 분모에서 2와 5를 하나씩 걷어내는 방식으로 풀었습니다. 수학 개념을 코드로 옮기는 문제라서 어렵지는 않았지만, 조건을 확인하는 순서를 놓치면 틀리기 쉬운 문제라고 느꼈습니다.

또한, math.gcd() 함수를 이용하는게 아닌, 유클리드 호제법으로도 풀이가 가능하다는 점을 

 

궁금하신 점이나 포스팅에 대한 피드백이 있다면 댓글로 편하게 남겨주세요.

도움이 되셨다면 공감이나 댓글 한 줄 남겨주시면 포스팅을 이어가는 데 큰 힘이 됩니다. 😊

'코딩테스트 > 알고리즘' 카테고리의 다른 글

[프로그래머스 LV.0] 문자열 밀기 — Python 정답 & 해설  (0) 2026.06.19
[프로그래머스 LV.2] 괄호 회전하기 — Python 정답 & 해설  (0) 2026.06.16
[프로그래머스 LV.0] 배열 만들기 2 — Python 정답 & 해설  (0) 2026.06.11
[프로그래머스 LV.0] 배열 조각하기 — Python 정답 & 해설  (0) 2026.06.11
[프로그래머스 LV.2] 행렬의 곱셈 — Python 정답 & 해설  (0) 2026.05.22
'코딩테스트/알고리즘' 카테고리의 다른 글
  • [프로그래머스 LV.0] 문자열 밀기 — Python 정답 & 해설
  • [프로그래머스 LV.2] 괄호 회전하기 — Python 정답 & 해설
  • [프로그래머스 LV.0] 배열 만들기 2 — Python 정답 & 해설
  • [프로그래머스 LV.0] 배열 조각하기 — Python 정답 & 해설
작지만 꾸준한 성장으로
작지만 꾸준한 성장으로
contact
  • 작지만 꾸준한 성장으로
    파랑새
    작지만 꾸준한 성장으로
  • 전체
    오늘
    어제
    • 분류 전체보기 (26)
      • IT (3)
      • 코딩테스트 (23)
        • 알고리즘 (12)
        • MYSQL (11)
      • 패션 (0)
      • 독후감 (0)
      • TIL (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    long format
    파이썬
    Pandas pivot
    모델 추론
    백준
    wide format
    Pandas melt
    와이드 포맷 롱 포맷
    Programmers
    파이썬코테
    mysql
    SWEA
    python3
    코딩테스트
    알고리즘
    CPU Bound
    데이터 전처리 파이프라인
    Pandas groupby agg
    프로그래머스 lv.1
    Python
    sql 코딩테스트
    코테
    데이터베이스
    프로그래머스 lv.2
    프로그래머스 lv.0
    I/O Bound
    공공데이터 전처리
    프로그래머스
    데이터 리모델링
    자바
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
작지만 꾸준한 성장으로
[프로그래머스 LV.0] 유한소수 판별하기 — Python 정답 & 해설
상단으로

티스토리툴바