[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
'Javascript > 자바스크립트 문제' 카테고리의 다른 글
[Javascript : programmers] 다항식 더하기 (Lv.0) (0) | 2024.08.30 |
---|---|
[Javascript : programmers] 문자열 밀기 (Lv.0) ⭐ (5) | 2024.08.30 |
[Javascript ] 최대공약수와 최소공배수 (0) | 2024.08.29 |
[Javascript : programmers] 저주의 숫자 3 (Lv.0) 💥 (0) | 2024.08.29 |
[Javascript : programmers] 치킨 쿠폰 (Lv.0) (0) | 2024.08.29 |