[ 프로그래머스 ] #42839 : 소수 찾기 - JAVA

🔗 소수 찾기

import java.util.*;

class Solution {
    public int solution(String numbers) {

        // Set 으로 숫자 조합 저장
        Set<Integer> numberSet = new HashSet<>();
        boolean[] visited = new boolean[numbers.length()];

        // 모든 자리수 조합을 만들기
        generateNumbers("", numbers, visited, numberSet);

        int count = 0;
        for (int num : numberSet) {
            if (isPrime(num)) {
                count++;
            }
        }

        return count;
    }

    // 숫자 조합을 만들어 Set에 추가
    private void generateNumbers(String current, String numbers, boolean[] visited, Set<Integer> numberSet) {
        if (!current.equals("")) {
            numberSet.add(Integer.parseInt(current));
        }

        for (int i = 0; i < numbers.length(); i++) {
            // 방문하지 않았다면
            if (!visited[i]) {
                visited[i] = true;
                // 방문
                generateNumbers(current + numbers.charAt(i), numbers, visited, numberSet);
                visited[i] = false;
            }
        }
    }

    // 소수 판별
    private boolean isPrime(int num) {
        if (num < 2) return false;

        for (int i = 2; i * i <= num; i++) {
            if (num % i == 0) return false;
        }

        return true;
    }
}