Carnival7 2021. 10. 23. 13:27

https://programmers.co.kr/learn/courses/30/lessons/42839

 

코딩테스트 연습 - 소수 찾기

한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이

programmers.co.kr

package programmers.level02.findPrimeNum;

import java.util.*;

public class FindPrimeNum_carnival77 {

    static int answer = 0 ;
    static boolean[] used = new boolean[7];
    static ArrayList<Integer> arr = new ArrayList<>();
    static String num;

    public void dfs(String[] str, int m,int idx){
        if(idx == m) {
            if (!arr.contains(Integer.parseInt(String.join("",str))))
                arr.add(Integer.parseInt(String.join("",str)));
            return;
        }

        for(int i=0;i<num.length();i++){
            if(used[i])
                continue;
            used[i]=true;
            str[idx] = Character.toString(num.charAt(i));
            dfs(str,m,idx+1);
            used[i]=false;
        }
    }

    public void prime(int x){
        if(x==0) return;
        if(x==1) return;

        for(int i=2;i<=Math.sqrt(x);i++){
            if(x%i==0) return;
        }

        answer+=1;
    }

    public int solution(String numbers) {
        num = numbers;
        // 1. 주어진 numbers의 순열의 모든 경우의 수를 조합
        for(int i=1;i<numbers.length()+1;i++){
            String[] str=new String[i];
            dfs(str,i,0);
        }
        // 2. 해당 숫자들 중 소수 판별
        for(int x:arr){
            prime(x);
        }
        return answer;
    }

    public static void main(String[] args) {
        String numbers = "17";
        FindPrimeNum_carnival77 sol = new FindPrimeNum_carnival77();
        System.out.println(sol.solution(numbers));
    }
}