양의 정수 n이 주어집니다. 이 숫자를 k진수로 바꿨을 때, 변환된 수 안에 아래 조건에 맞는 소수(Prime number)가 몇 개인지 알아보려 합니다.
예를 들어, 437674을 3진수로 바꾸면 211020101011입니다. 여기서 찾을 수 있는 조건에 맞는 소수는 왼쪽부터 순서대로 211, 2, 11이 있으며, 총 3개입니다.
정수 n과 k가 매개변수로 주어집니다. n을 k진수로 바꿨을 때, 변환된 수 안에서 찾을 수 있는 위 조건에 맞는 소수의 개수를 return 하도록 solution 함수를 완성해 주세요.
console.log(solution(437674, 3)); // 3
console.log(solution(110011, 10)); // 2
const isPrime = (n) => {
if (n <= 1) return false;
for (let i = 2; i <= Math.sqrt(n); i++) {
if (n % i === 0) return false;
}
return true;
};
function solution(n, k) {
return n
.toString(k)
.split("0")
.map(Number)
.filter((x) => isPrime(x)).length;
}
toString
메서드를 통해 n을 k진수로 변환한 후, '0'을 기준으로 split 한다.map
을 통해 데이터타입을 문자열에서 숫자열 타입으로 변환 후 filter
로 각 요소를 isPrime 함수의 매개변수로 전달한다.isPrime 함수 : 소수인지 아닌지 판별하는 함수
- n이 1이거나 ''라면(0) false를 리턴한다.
- 2부터 n제곱근까지의 수로 n을 나눴을 때 나누어 떨어지는 경우가 한 번이라도 있으면 n은 소수가 아니므로 false를 리턴한다.
- 1, 2번에 해당하지 않으면 소수므로 true를 리턴한다.