[완전 탐색] 소수 찾기
한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다.
각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요.
제한사항
- numbers는 길이 1 이상 7 이하인 문자열입니다.
- numbers는 0~9까지 숫자만으로 이루어져 있습니다.
- "013"은 0, 1, 3 숫자가 적힌 종이 조각이 흩어져있다는 의미입니다.
https://school.programmers.co.kr/learn/courses/30/lessons/42839
import java.util.*;
public class Main60 {
public static void main(String[] args) {
String numbers = "17";
var reuslt = solution(numbers);
System.out.println("===================");
System.out.println(reuslt);
}
public static int solution(String numbers) {
String[] numbersArray = new String[numbers.length()];
boolean[] isUsed = new boolean[numbers.length()];
Set<Integer> allCase = new HashSet<>();
for (int i = 0; i < numbersArray.length; i++) {
numbersArray[i] = numbers.substring(i, i + 1);
}
dfs(numbersArray, "", isUsed, allCase);
return allCase.size();
}
public static void dfs(String[] numbersArray, String num, boolean[] isUsed, Set<Integer> allCase) {
if (num.length() == numbersArray.length) {
return;
}
for (int i = 0; i < numbersArray.length; i++) {
if (isUsed[i]) {
continue;
}
isUsed[i] = true;
var newCase = num + numbersArray[i];
if (check(newCase)) {
allCase.add(Integer.parseInt(newCase));
}
dfs(numbersArray, newCase, isUsed, allCase);
isUsed[i] = false;
}
}
static boolean check(String num) {
int cast = Integer.parseInt(num);
if (cast == 1 || cast == 0) {
return false;
}
for (int i = 2; i < cast; i++) {
if (cast % i == 0) {
return false;
}
}
return true;
}
}