내 코드
from math import gcd
def solution(a, b):
g = gcd(a, b)
b //= g
while b % 2 == 0:
b //= 2
while b % 5 == 0:
b //= 5
return 1 if b == 1 else 2
코드 설명
- gcd 함수를 이용하여 분자와 분모의 최대공약수를 구하고, 분모를 최대공약수로 나눠 기약분수로 만듭니다.
- 기약분수의 분모를 2로 나누고, 더 이상 2로 나눌 수 없을 때까지 반복합니다.
- 동일하게 분모를 5로 나누고, 더 이상 5로 나눌 수 없을 때까지 반복합니다.
- 마지막으로 분모가 1이면 유한소수이므로 1을 반환하고, 그렇지 않으면 무한소수이므로 2를 반환합니다.
특징
- 분모에서 소인수 2와 5를 반복적으로 제거하므로 유한소수의 조건을 직접적으로 확인할 수 있습니다.
- 최대공약수를 사용해 불필요한 연산을 줄여 효율적입니다.
다른 코드
def solution(a, b):
return 1 if a/b * 1000 % 1 == 0 else 2
코드 설명
- a/ba/b를 소수로 변환한 후, ×1000\times 1000을 하여 유한소수의 정밀성을 확인합니다.
- 계산된 값의 소수점 이하 값이 0인지 확인하여 유한소수 여부를 판단합니다.
특징
- 코드가 매우 간결하며, 수학적 계산을 통해 결과를 도출합니다.
- a/ba/b의 결과에 대해 소수점 이하 값을 확인하므로 논리적으로 유한소수 여부를 판단할 수 있습니다.
- 다만, 부동소수점 연산으로 인해 정확도 문제가 발생할 가능성이 있습니다.
두 코드 비교
- 내 코드는 분모의 소인수 조건(2와 5만 존재)을 정확히 확인하며, 논리적이고 안정적입니다.
- 다른 코드는 간결하지만 부동소수점 연산 특성상 매우 큰 값이나 정밀도 문제가 발생할 수 있습니다.
- 내 코드는 수학적 조건을 직접 구현해 정확한 결과를 보장하는 반면, 다른 코드는 부동소수점 계산에 의존하므로 정확도 측면에서 차이가 있습니다.
결론
유한소수인지 판단할 때는 정확성과 안정성을 고려하는 것이 중요합니다. 내 코드는 소인수의 조건을 직접 확인하기 때문에 신뢰도가 높으며, 코딩 테스트에서도 활용도가 높습니다. 반면, 다른 코드는 간결하지만 부동소수점 문제를 고려해야 합니다.
국국, 문제를 해결하는 데 두 접근법을 잘 이해하며 사용해보세요!
'프로그래머스' 카테고리의 다른 글
프로그래머스 | Python | 특이한 정렬 (1) | 2025.01.16 |
---|---|
프로그래머스 | Python | 문자열 밀기 (1) | 2025.01.15 |
프로그래머스 | Python | 등수 매기기 (0) | 2025.01.10 |
프로그래머스 | Python | 치킨 쿠폰 (1) | 2025.01.08 |
프로그래머스 | Python | 저주의 숫자 3 (0) | 2025.01.07 |