한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다.
각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요.
function solution(numbers) {
var answer = 0;
const splitNumbers = numbers.split('');
let primeNumbers = [];
const permutation = (arr, sNum) => {
let result = [];
if (sNum === 0) {
return arr.map((item) => item);
};
arr.forEach((item, index) => {
const fixNum = item;
const restArr = arr.filter((child, childIndex) => index !== childIndex);
const permArr = permutation(restArr, sNum - 1);
const combine = permArr.map((child) => fixNum + child);
result.push(...combine);
});
return result;
};
const isPrime = (number) => {
if (number <= 1) return false;
let i = 2;
while (i < number) {
if (number % i === 0) return false;
i++;
}
return true;
}
for (let i = 0; i < splitNumbers.length; i++) {
primeNumbers = [
...primeNumbers,
...permutation(splitNumbers, i)
];
}
primeNumbers = [...new Set(primeNumbers.map((item) => Number(item)))].filter((item) => item > 1);
primeNumbers = primeNumbers.filter((item) => isPrime(item));
answer = primeNumbers.length;
return answer;
}