[프로그래머스] Level2 - 소수찾기

 
by 박신종

> 문제

문제 : [큰 수 만들기]



문제풀이

조합 완탐 문제.

완탐으로 도출되는 각 값에서 소수검사를 해주었고, 중복되는 값은 HashSet으로 처리하였다


import java.util.*;
class Solution {
    static char[] numbersToChar;
    static boolean[] visit;
    static List<Character> list;
    static Set<Integer> set;
    static boolean check(){
        StringBuilder sb = new StringBuilder();
        for(int i=0; i<list.size(); i++){
            sb.append(list.get(i));
        }
        int num = Integer.parseInt(sb.toString());
        if(num == 0 || num == 1) return false;
        if(set.contains(num)) return false;
        for(int i=2; i <= Math.sqrt(num); i++){
            if(num % i == 0) return false;
        }
        set.add(num);
        return true;
    }
    static int res;
    static void rec(int d){
        if(!list.isEmpty() && check()) res++;
        if(d == numbersToChar.length) return;
        for(int i=0; i<numbersToChar.length; i++){
            if(!visit[i]){
                list.add(numbersToChar[i]);
                visit[i] = true;
                rec(d+1);
                list.remove(d);
                visit[i] = false;
            }
        }
    }
    static public int solution(String numbers) {
    	set = new HashSet<>();
        numbersToChar = numbers.toCharArray();
        visit = new boolean[numbers.length()];
        list = new ArrayList<>();
        rec(0);
        return res;
    }
}




문제 출처 : Programmers