문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
정답
function solution(a, b) {
let gcd = 1; // 최대공약수(greatest common divisor)
for (let i = 2; i <= Math.min(a, b); i++) {
if (a % i === 0 && b % i === 0) {
gcd = i;
}
}
b = b / gcd; // 분모를 최대공약수로 나눠 기약분수의 분모로 바꿈
let pf = []; // 소인수(prime factor)
while (b % 2 === 0) {
pf.push(2);
b /= 2;
}
for (let i = 3; i * i <= b; i += 2) {
while (b % i === 0) {
pf.push(i);
b /= i;
}
}
if (b > 1) pf.push(b);
// 소인수 배열에 2나 5가 포함되면 삭제
for (let i = 0; i < pf.length; i++) {
if (pf[i] === 2 || pf[i] === 5) {
pf.splice(i, 1);
i--;
}
}
// 2와 5를 제거한 소인수 배열의 길이가 0이면 1 반환, 그렇지 않으면 2 반환
if (pf.length === 0) {
return 1;
} else {
return 2;
}
}