길이가 짧아서 재귀를 사용했다.
재귀를 사용해서 answer 배열에 담고 중복을 제거하기 위해 new Set을 사용했다.
그리고 나서, filter 메서드를 통해 소수를 판별해서 개수를 return 했다.
function solution(numbers) {
let ch = Array.from({length:numbers.length}, () => 0);
let tmp = [];
let answer = [];
function Dec(L) {
if (tmp.length > 0) answer.push(Number(tmp.join('')));
if (L>=numbers.length) return;
else {
for (let i=0; i<numbers.length; i++) {
if (ch[i]===0) {
ch[i]=1;
tmp[L]=numbers[i];
Dec(L+1);
tmp.pop();
ch[i]=0;
}
}
}
}
Dec(0);
return [...new Set(answer)].filter(v => {
let cnt=0;
for (let i=2; i<=Math.sqrt(v); i++) {
if (v%i===0) cnt++;
}
if (v>1 && cnt==0) return true;
}).length;
}
// console.log(solution("17"));
console.log(solution("011"));
문자열을 splice해서 재귀를 도는 방식
function solution(numbers) {
var answer = [];
let nums = numbers.split('');
// 소수 판별
const isPrimeNum = (num) => {
if(num<=1) return false;
for (let i = 2; i*i <= num; i++) {
if (num % i === 0) return false;
}
return true;
}
// 순열 만들기
const getPermutation = (arr, fixed) => {
if(arr.length >= 1) {
for (let i=0; i<arr.length; i++) {
const newNum = fixed + arr[i];
const copyArr = [...arr];
copyArr.splice(i, 1);
if (!answer.includes(+newNum) && isPrimeNum(+newNum)){
answer.push(+newNum)
}
getPermutation(copyArr, newNum);
}
}
}
getPermutation(nums, '');
return answer.length;
}
// console.log(solution("17"))
console.log(solution("011"))