Java

프로그래머스: 소수 찾기

Daeryuk Kim 2024. 3. 30. 23:02
import java.util.HashSet;

public class Solution {
    private HashSet<Integer> numberSet = new HashSet<>();

    public int solution(String numbers) {
        boolean[] visited = new boolean[numbers.length()];
        StringBuilder temp = new StringBuilder();
        for (int i = 0; i < numbers.length(); i++) {
            // 숫자 조합 생성
            permutation(numbers, temp, visited, 0, i + 1);
        }
        // 소수 판별
        return (int) numberSet.stream().filter(this::isPrime).count();
    }

    private void permutation(String str, StringBuilder temp, boolean[] visited, int depth, int r) {
        if (depth == r) {
            int num = Integer.parseInt(temp.toString());
            numberSet.add(num);
            return;
        }

        for (int i = 0; i < str.length(); i++) {
            if (!visited[i]) {
                visited[i] = true;
                temp.append(str.charAt(i));
                permutation(str, temp, visited, depth + 1, r);
                temp.deleteCharAt(temp.length() - 1);
                visited[i] = false;
            }
        }
    }

    private boolean isPrime(int number) {
        if (number < 2) return false;
        for (int i = 2; i * i <= number; i++) {
            if (number % i == 0) return false;
        }
        return true;
    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        System.out.println(solution.solution("17")); // 3
    }
}