💡 문제

💬 입출력 예시

📌 풀이(소스코드)
import java.util.*;
class Solution {
    static ArrayList<Integer> list = new ArrayList<>();
    static boolean[] used = new boolean[7];
    
    public int solution(String numbers) {
        int answer = 0;
        
        for (int i = 0; i < numbers.length(); i++) {
            dfs(numbers, "", i+1);
        }
        
        for (int i = 0; i < list.size(); i++) {
            if (isPrime(list.get(i))) {
                answer++;
            }
        }
        
        return answer;
    }
    
    public void dfs(String numbers, String temp, int n) {
        if (temp.length() == n) {
            int num = Integer.parseInt(temp);
            if (!list.contains(num)) {
                list.add(num);
            }
        }
        
        for (int i = 0; i < numbers.length(); i++) {
            if (used[i]) continue;
            used[i] = true;
            temp += numbers.charAt(i);
            dfs(numbers, temp, n);
            used[i] = false;
            temp = temp.substring(0, temp.length() - 1);
        }
    }
    
    public boolean isPrime(int n) {
        if (n < 2) return false;
        
        for (int i = 2; i * i <= n; i++) {
            if (n % i == 0) return false;
        }
        
        return true;
    }
}
📄 해설
접근
- 주어진 숫자로 만들 수 있는 모든 숫자에 대해 소수 판정을 수행하면 되는 문제
 
과정
- 주어진 숫자 
numbers 를 사용해서 만들 수 있는 모든 숫자를 찾고, 이를 list 에 추가한다. 
- 이때의 과정은 DFS 를 수행해서 구현한다.
 
- 사용하지 않은 숫자면 임시 문자열 
temp 에 추가하고 재귀 호출 
- 재귀 수행 후에는 해당 숫자를 임시 문자열 
temp 에서 제거 
- 완료된 DFS 를 수행하여 얻은 숫자 리스트 
list 를 순회하며 isPrime 메소드를 사용하여 소수 여부를 판별한다. 
- 소수이면 
answer 의 값을 증가시킨다.