
두 정수 A, B를 소인수 분해 했을 때, 공통된 소수의 집합을 가지고 있는 지 판단하는 함수를 작성하세요.
소인수분해는, 어떤 자연수를 소인수들의 곱으로 표현하는 것을 말합니다.
우선 인수란, 어떤 수나 식을 곱하기로 표현했을 때 곱해지는 각각의 것들을 말합니다. 예를 들어 3 x 4 = 12 = 2 x 6 일 때, 3, 4, 2, 6, 1, 12는 모두 12의 인수입니다. 이는 약수의 개념과 비슷하나 약수는 나눗셈을, 인수는 곱셈을 기준으로 합니다.
이러한 인수 중에서 특별히 소수인 인수를 소인수라고 합니다.
소수는 1보다 큰 자연수 중 1과 자기 자신만을 약수로 가지는 수입니다.
소인수분해 하는 방법은 여러가지가 있으나, 가장 쉬운 방법은 자연수를 소수가 나올 때까지 계속 소수로 나누는 것입니다. 예를 들어 60을 소인수분해한다면, 60/2/2/3= 5로, 각 나눈 소수와 몫이 모두 소인수가 됩니다. 따라서 60 = 2² x 3 x 5 입니다. 이를 코드에 적용할 수 있습니다.
function findPrimeFactors(n, prime) {
for (let i = 2; i <= Math.floor(Math.sqrt(n)); i++) {
while (n % i === 0) {
prime.add(i.toString());
n /= i;
}
}
}
function solution(A, B) {
let primeA = new Set();
let primeB = new Set();
let answer = 0;
findPrimeFactors(A, primeA);
findPrimeFactors(B, primeB);
const a = Array.from(primeA).join('');
const b = Array.from(primeB).join('');
if (a === b) {
answer = 1;
}
return answer;
}
findPrimeFactors 함수의 범위에 관한 부분은 링크에서 자세하게 다루고 있으니 참고하는 것이 좋습니다.
findPrimeFactors 함수는 prime이라는 배열에 구한 소수를 문자열화해서 넣고 (set 이므로) 정수 n을 그 소수로 나누어서 반복하며 탐색합니다. 이는 위에서 말한 소인수분해 하는 방법을 구현한 것과 같습니다.
solution 함수는, 매개변수로 A, B를 받습니다. 소수를 중복하여 여러 개 받을 필요 없으므로 Set 함수를 각각 선언하고, 소인소분해하는 함수에 넣습니다.
각 소수의 조합이 나온다면, a, b라는 새로운 변수를 생성한 후, 해당 조합을 배열화 (Array.from) 한 후 빈 문자열로 구분하여 하나의 문자열로 합칩니다.
마지막으로, a와 b를 비교하여 두 수의 소수의 조합이 같다면 true (즉, 1)를 반환합니다.