programmers 소수 찾기

밍디·2021년 10월 20일
0
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
를 참고하자.

profile
노후를 위해 꾸준히 공부하자.

0개의 댓글