본문 바로가기
Javascript/자바스크립트 문제

[Javascript : programmers] 유한소수 판별하기 (Lv.0)

by isfp_yykkng 2024. 8. 29.

[Javascript : programmers] 유한소수 판별하기 (Lv.0)

 

문제

 

나의 정답 풀이

const gcd = (num1, num2) => (num2 > 0 ? gcd(num2, num1 % num2) : num1);
function solution(a, b) {
    b = b/gcd(a,b);
    let arr = [];
    let div = 2;
    while(b>=2){
        if(b%div==0){
            arr.push(div);
            b /= div;
        }else div++;
    }
    return arr.join('').replace(/[25]/g, '').length ? 2 : 1;
}

 

유클리드 호제법에 의한 최대공약수 함수 gcd를 활용하였다.

분모에 대해서만 a,b 의 최대공약수로 나눈 b 를 저장하고 이 b에 대한 소인수분해를 진행하였다.

이렇게 나온 소인수들의 배열 arr을 문자열로 합치고 2, 5를 빈칸으로 바꿔 그 길이가 0이면 유한소수로 판별하였다.

 

다 풀고 다른 사람 풀이를 보는데 굳이 소인수분해에 대한 코드를 사용하지 않아도 될 것 같았다....

 

다른 사람 풀이

function solution(a, b) {
    let n = 1;
    for (let i = 1; i <= Math.min(a,b); i++) {
        if (a%i===0 && b%i===0) n = i;
    } //최대공약수 구하기

    b/=n; //최대공약수로 나누기
    while (b%2===0) b/=2;
    while (b%5===0) b/=5;

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

 

이 풀이는 최대공약수를 직접 구현한 풀이이다. 

 

a,b 중 작은 수까지 1부터 for문을 반복하면서 a,b 두 수 모두의 배수인 것을 최대공약수에 넣는다.

이를 끝까지 반복해 나온 가장 큰 수가 바로 최대공약수  이다. 

 

이렇게 b를 최대공약수로 나누고 b를 2 와 5 로 무한 루프 while 문으로 나누고 그 값이 1이라면 유한소수로 판별한다.

 


<참고>

최대공약수, 최소공배수 구하기

2024.08.29 - [Javascript/자바스크립트 문제] - [Javascript ] 최대공약수와 최소공배수

 

[Javascript ] 최대공약수와 최소공배수

[Javascript ] 최대공약수와 최소공배수 최대공약수 (GCD : the Greatest Common Denominator)간단히 말해 최대공약수란  두 수의 공통된 약수 (공약수) 중 가장 큰 값  을 말한다. 만약 최대공약수를 직접

yy-kkang.tistory.com

 

소인수분해, 소인수 구하기

2024.08.27 - [Javascript/자바스크립트 문제] - [Javascript : programmers] 소인수분해 (Lv.0)

 

[Javascript : programmers] 소인수분해 (Lv.0)

[Javascript : programmers] 소인수분해 (Lv.0) 문제 나의 정답 풀이function solution(n) { let arr = []; let div = 2; while(n>=2){ if(n%div==0){ arr.push(div); n /= div; }else div++; } return [...new Set(arr)];} while문으로 n을 계속 2

yy-kkang.tistory.com