import java.util.*;
class Solution {
public int solution(String numbers) {
int count=0;
String[] strArr = numbers.split("");//numbers를 배열로 만듬.
ArrayList <Integer> comb=new ArrayList<>();
int [] check=new int[strArr.length];
dfs(check,comb,strArr);
return count;
}
public void isPrime(ArrayList <Integer>comb){
}
public void dfs(int [] check,ArrayList <Integer> comb,String[] strArr ){
if(comb.size()!=0){
System.out.println(comb);
}
for(int i=0;i<strArr.length;i++){
if(check[i]==0){
check[i]=1;
comb.add(Integer.parseInt(strArr[i]));
dfs(check,comb,strArr);
comb.remove(comb.size()-1);
check[i]=0;
}
}
}
}
순열인데 사실 이런식으로 comb 배열을 join하여 숫자로 만들려했으나
java에는 그런기능이없었다..... 하 ㅠㅡㅠ
그래서 조금 방향을 바꿨다.
import java.util.*;
class Solution {
public int solution(String numbers) {
int count=0;
String[] strArr = numbers.split("");//numbers를 배열로 만듬.
String comb="";
HashSet<Integer> set = new HashSet<>();
int [] check=new int[strArr.length];
dfs(check,comb,strArr,set);
count=isPrime(set);
return count;
}
public int isPrime(HashSet<Integer> set){
Iterator iter = set.iterator();
int count=0;
while(iter.hasNext()){
int temp=(int)iter.next();
System.out.println(temp);
if(temp==0||temp==1){
}else if(temp==2){
count++;
}else{
int no=0;
for(int i=2;i<=Math.sqrt(temp);i++){
if(temp%i==0){
no++;
}
}
if(no==0){
count++;
}
}
}
System.out.println(count);
return count;
}
public void dfs(int [] check,String comb,String[] strArr,HashSet<Integer> set){
if(comb!=""){
set.add(Integer.parseInt(comb));
}
for(int i=0;i<strArr.length;i++){
if(check[i]==0){
check[i]=1;
comb=comb+strArr[i];
dfs(check,comb,strArr,set);
comb=comb.substring(0,comb.length()-1);
check[i]=0;
}
}
}
}
배열로 순열을 찾아내던 comb를 문자열로 바꿨다.
참 골치아픈건 배열은 length, arraylist는 size(), 문자열은 length()로 길이를 반환한다는 것이다.
내가 너무 javascript의 편한맛에 중독된것같다ㅠㅠ
hashset의 사용은 https://coding-factory.tistory.com/554
를 참고하자.