[プログラマ]小数点-Javaの検索




コードテストの問題を学ぶにはいくつかの良い問題があります.
この問題の鍵は、すべての場合に再帰的なデジタルカードを使用する数を見つけ、「アラトネスのふるい」を利用して少数かどうかを判断することにある.
  • numberの中のデジタルカードのすべての状況を繰り返さずに作成できる数字を探します.
  • はそれぞれデジタルカードを確認し、少数か否かを判断する.
  • 次のコードで実現できます.
    import java.util.*;
    
    class Solution {
    	// set을 이용하여 중복 제거
        static HashSet<Integer> map = new HashSet<>();
        
        // 재귀함수를 호출하여 숫자카드의 모든 경우의 수를 set에 담는다
        public static void recrusive(String a, String b) {
            if(!"".equals(a)) {
    			map.add(Integer.parseInt(a));
    		}
    		
    		for(int i = 0 ; i < b.length(); i++) {
    			recrusive(a + b.charAt(i), b.substring(0, i) + b.substring(i + 1));
    		}
        }
        
        // 소수인지 확인하고, 합산하여 리턴해준다.
        public static int sqrt(HashSet<Integer> map, int answer) {
            Iterator<Integer> iter = map.iterator();
            
            while(iter.hasNext()) {
                boolean result = true;
                int val = iter.next();
    
                if(val == 0 || val == 1) {
                    continue;
                }
    
                int root = (int) Math.sqrt(val);
                for(int i = 2; i <= root; i++) {
                    if(val % i == 0) {
                        result = false;
                        break;
                    }
                }
    
                if(result) {
                    answer++;
                }
    
            }
            
            return answer;
        }
        
        public int solution(String numbers) {
            int answer = 0;
    		// 탐색 시작
            recrusive("", numbers);
            
            return sqrt(map, answer);
        }
    }