function solution(numbers) {
var answer = 0;
const nums = numbers.split("")
// 분리한 숫자들을 내림차순으로 변경해서 숫자로 만듬
const max = Number(nums.slice().sort((x, y) => y - x).join(""))
// 2부터 내림차순으로 생성한 숫자까지의 전체 소수를 배열로 받음
// ex> max=13 primeArr =[2,3,5,7,11,13]
// 생성한 소수가 parameter 로 받은 numbers 로 만들 수 있는 수인지 확인하고
// 만들 수 있으면 count++
const primeArr = getPrimeNumbers(max)
for (const item of primeArr) {
const arr = item.toString().split("")
if (isTrue(arr, nums))
{
answer++
}
}
return answer;
}
// primeNumber 의 개별숫자 ex 13 ->1,3 이 parameter 로 받은 배열에 존재하는 지 확인
const isTrue = (arr, nums) => {
const copy = nums.slice()
for (const item of arr) {
const index = copy.indexOf(item)
if (index === -1) {
return false
}
// 11 때문에 splice 를 무조건 해줘야 함
// 삭제를 안해주면 17 로 11을 만들수 있는게 되버림
// 17 에 1이 있으면 중복을 방지하기 위해서 1을 없애야 함
// 7에 1이있는지 다시 확인해야
copy.splice(index, 1)
}
// arr 에 있는 요소가 parameter 로 받은 숫자 배열에 전부 있어야 true
// 하나라도 없으면 false
return true
}
// parameter 로 받은 숫자를 내림차순 정렬로 만들고
// 2부터 내림차순된 숫자까지의 전체 소수를 배열로 리턴
function checkPrimeNumber(number){
if(number===1)
{ return false;}
else if(number===2)
{ return true;
}
else {
for(let i=3; i<number; i++)
{
if(number%2===0)
{
return false
}
if(number%i===0)
{
return false
}
}
return true
}
}
function getPrimeNumbers(number){
let primeNumbers = [2];
for(let i=3; i<=number; i++)
{
if(checkPrimeNumber(i))
{
primeNumbers.push(i)
}
}
return primeNumbers;
}