https://programmers.co.kr/learn/courses/30/lessons/42839
1) 주어진 numbers를 한 자씩 쪼개 순열을 만든다.
2) 만들어놓은 순열들을 소수인지 아닌지 필터한다.
3) 필터된 배열의 length를 리턴한다.
const getPermutations= function (arr, selectNumber) {
const results = [];
if (selectNumber === 1) return arr.map((value) => [value]);
arr.forEach((fixed, index, origin) => {
const rest = [...origin.slice(0, index), ...origin.slice(index+1)]
const permutations = getPermutations(rest, selectNumber - 1);
const attached = permutations.map((permutation) => [fixed, ...permutation]);
results.push(...attached);
});
return results;
};
function isPrime(num) {
if(num === 0 || num === 1) return false;
if(num === 2) return true;
for(let i = 2; i <= Math.floor(Math.sqrt(num)); i++){
if(num % i === 0) return false;
}
return true;
}
function solution(numbers) {
let numArr = numbers.split("");
let candArr = [];
for(let i = 1; i <= numArr.length; i++){
candArr = candArr.concat(getPermutations(numArr, i));
}
candArr = candArr.map(str => Number(str.join("")))
candArr = candArr.filter((str, i) => candArr.indexOf(str) === i).filter(num => isPrime(num))
return candArr.length;
}
function solution(numbers) {
var answer = 0;
var n = numbers.split('');
var nums = new Set()
combi(n,'');
function combi(a, s) {
if (s.length > 0) {
if (nums.has(Number(s))=== false) {
nums.add(Number(s));
console.log(Number(s))
if (chkPrime(Number(s))) {
answer++;
}
}
}
if (a.length > 0) {
for (var i = 0; i< a.length; i++) {
var t = a.slice(0)
t.splice(i,1);
//console.log(t)
combi(t,s + a[i]);
}
}
}
function chkPrime(num) {
if (num < 2) return false;
if (num === 2) return true;
for (var i = 2; i <= Math.sqrt(num); i++) {
if (num%i===0) return false;
}
return true;
}
return answer;
}