11import java .util .*;
2+
23class Solution {
3- // 중복 방지
4- Set <Integer > set = new HashSet <>();
5- boolean [] visited ;
4+ HashSet <Integer > set = new HashSet <>();
65 public int solution (String numbers ) {
7- char [] num = numbers .toCharArray ();
8- visited = new boolean [num .length ];
9-
10- for (int i =1 ; i <= num .length ; i ++){
11- premutation (num ,"" ,i );
12- }
13-
14- int count = 0 ;
15- for (int number : set ){
16- if (isPrime (number )){
17- count ++;
18- }
19- }
20-
21- return count ;
22- }
23-
24- private boolean isPrime (int number ) {
25- if (number <=1 ){
26- return false ;
27- }
28- for (int i =2 ; i <= Math .sqrt (number ) ; i ++){
29- if (number % i == 0 ){
30- return false ;
6+ char [] nums = numbers .toCharArray ();
7+ boolean [] visited = new boolean [nums .length ];
8+ // 완전 탐색으로 숫자를 만듬
9+ dfs ("" ,nums ,visited );
10+
11+ int answer = 0 ;
12+ for (int num : set ){
13+ if (isPrime (num )){
14+ answer ++;
3115 }
3216 }
33- return true ;
17+
18+ return answer ;
3419 }
35-
36- private void premutation (char [] num , String current , int maxLength ) {
37- if (current .length () == maxLength ) {
20+
21+ public void dfs (String current , char [] nums , boolean [] visited ){
22+ // set에 등록
23+ if (!current .equals ("" )){
3824 set .add (Integer .parseInt (current ));
39- return ;
4025 }
41-
42- for (int i = 0 ; i < num .length ; i ++){
43- if (visited [i ] == false ){
26+
27+ for (int i = 0 ; i <nums .length ;i ++){
28+ // 아직 사용 안 한 숫자
29+ if (!visited [i ]){
4430 visited [i ] = true ;
45- premutation ( num , current + num [i ],maxLength );
31+ dfs ( current + nums [i ],nums , visited );
4632 visited [i ] = false ;
4733 }
4834 }
49-
50-
35+ }
36+
37+ public boolean isPrime (int num ){
38+ if (num < 2 ) return false ;
39+
40+ for (int i = 2 ; i <= Math .sqrt (num ); i ++){
41+ if (num % i == 0 ) return false ;
42+ }
43+
44+ return true ;
5145 }
5246}
0 commit comments