[프로그래머스] 유한소수 판별하기.JS

ungnam·2023년 6월 7일

programmers level0

목록 보기
21/29
post-thumbnail

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

나의 풀이

function solution(a, b) {
    let gcd = Math.min(a, b);

    while (gcd >= 1) {
        if (!(a % gcd || b % gcd)) {
            break;
        }
        gcd--;
    }

    b /= gcd;

    while (!(b % 5 && b % 2)) {
        b = !(b % 5) ? b / 5 : b / 2;
    }

    return b === 1 ? 1 : 2;
}

a(분자)b(분모) 모두 나뉘어질 수 있는 최댓값을 gcd로 설정
gcd로 나눈 b(분모)52로 더 이상 나뉘어지지 않을 때까지 계속해서 52로 나눔
b1이라면 분모의 소인수가 52만 존재한다는 뜻이기 때문에 유한소수로 판별됨

참고할 만한 풀이

function solution(a, b) {
    return Number((a/b).toFixed(10)) === a/b ? 1 : 2;
}

toFixed(10)를 통해 소수 10번째 자리까지 표현
✔ 보통 소수 10번째 자리를 넘어가는 경우는 무한소수일 확률이 대부분이기 때문에 위의 결과가 false가 나올 것이다.

profile
꾸준함을 잃지 말자.

0개의 댓글