일단 가장 먼저 순열, 조합이 생각났고 그 외에 딱히 다른 풀이법이 떠오르지 않았다. 문제 컨셉이 완전탐색인 것도 한 몫 했다. L2문제지만 1시간이 넘게 걸려 결국 풀지 못했다.
Set api를 사용하여 원소를 쉽게 찾고, 추가하고, 삭제할 수 있다. 특정 원소를 찾는 방법이 생각보다 까다로웠는데 Set api를 숙지하면 활용할 곳이 많을 것 같다. 재귀함수를 사용해서 문제를 해결하였는데 이 방법이 알고리즘적으로 효율적인지는 의문이다.
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;
}