이 글에서는 숫자를 입력받아 해당 숫자를 정확히 나누어 떨어지게 하는 모든 소수, 즉 소인수를 배열 형태로 반환하는 JavaScript 함수를 작성해 보겠습니다.
문제 이해하기
예를 들어, 입력값이 105라고 가정해 보겠습니다. 105는 3 × 5 × 7로 분해할 수 있으므로, 기대되는 출력 결과는 다음과 같습니다.
const output = [3, 5, 7];
구현 코드
이를 구현한 전체 코드는 다음과 같습니다.
const num = 105;
const isPrime = (n) => {
for(let i = 2; i <= n/2; i++){
if(n % i === 0){
return false;
}
};
return true;
};
const findPrimeFactors = num => {
const res = num % 2 === 0 ? [2] : [];
let start = 3;
while(start <= num){
if(num % start === 0){
if(isPrime(start)){
res.push(start);
}
}
start++;
};
return res;
};
console.log(findPrimeFactors(num));
코드 동작 원리
1. isPrime — 소수 판별 함수
isPrime 함수는 주어진 숫자가 소수인지 판별합니다. 2부터 n/2까지의 값으로 차례대로 나눠 보고, 하나라도 나누어 떨어지면 약수가 존재하는 것이므로 false를 반환합니다. 끝까지 나누어 떨어지지 않는다면 소수이므로 true를 반환합니다.
2. findPrimeFactors — 소인수 추출 함수
findPrimeFactors 함수는 먼저 입력값이 짝수인지 확인하여 결과 배열을 초기화합니다. 짝수라면 2가 반드시 소인수이므로 [2]로 시작하고, 홀수라면 빈 배열로 시작합니다.
이후 3부터 입력값까지 반복하면서, 입력값을 나누어 떨어지게 하는 숫자 중 소수인 값만 골라 결과 배열에 추가합니다. 최종적으로 완성된 배열을 반환합니다.
출력 결과
위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.
[3, 5, 7]