https://programmers.co.kr/learn/courses/30/lessons/42839#
여러개의 숫자를 조합해 만들 수 있는 모든 숫자 중, 소수의 갯수를 찾는 문제
모든 순열 경우의 수를 구하고, HashSet에 Integer로 변환하면서 저장해서 중복을 제거한 후
HashSet 안에 있는 모든 수를 소수가 맞는지 아닌지 검사했다.
import java.util.*;
class Solution {
static ArrayList<String> results = new ArrayList<>();
public int solution(String numbers) {
int answer = 0;
int n = numbers.length();
char[] arr = new char[n];
for (int i = 0; i < n; i++) {
arr[i] = numbers.charAt(i);
}
boolean[] visited = new boolean[n];
String output = "";
perm(arr, output, visited, n, n, 0);
HashSet<Integer> intSet = new HashSet<>();
for (String str: results) {
intSet.add(Integer.parseInt(str));
}
System.out.println(intSet);
for (Integer val : intSet) {
if (isPrime(val.intValue())) {
answer++;
}
}
return answer;
}
static void perm(char[] arr, String output, boolean[] visited, int n, int r, int depth) {
if (depth == r) {
return;
}
for (int i = 0; i < n; i++) {
if (!visited[i]) {
output += arr[i];
visited[i] = true;
results.add(new String(output));
perm(arr, output, visited, n, r, depth + 1);
visited[i] = false;
output = output.substring(0, output.length()-1 );
}
}
}
public static boolean isPrime(int num) {
if (num == 1 || num == 0) {
return false;
}
if (num == 2) {
return true;
}
boolean result = false;
int end = (int)Math.sqrt(num);
for(int i = 2; i <= end; i++) {
if( num%i == 0) {
return false;
}
}
return true;
}
}