File tree Expand file tree Collapse file tree 1 file changed +67
-0
lines changed
Expand file tree Collapse file tree 1 file changed +67
-0
lines changed Original file line number Diff line number Diff line change 1+ ``` java
2+ import java.util.Arrays ;
3+ import java.util.HashSet ;
4+ import java.util.Set ;
5+
6+ class PGM_LV2_ 소수_찾기 {
7+
8+ private static int len;
9+ private static String num;
10+ private static boolean [] isPrime, visited;
11+ private static Set<Integer > set;
12+
13+ private static void findPrime () {
14+ Arrays . fill(isPrime, 2 , 10000000 , true );
15+
16+ for (int i = 2 ; i * i <= 10000000 ; i++ ) {
17+ if (isPrime[i]) {
18+ for (int j = i * i; j < 10000000 ; j += i) {
19+ isPrime[j] = false ;
20+ }
21+ }
22+ }
23+ }
24+
25+ private static void init (String numbers ) {
26+ num = numbers;
27+ len = num. length();
28+
29+ isPrime = new boolean [10000000 ];
30+ visited = new boolean [len];
31+
32+ set = new HashSet<> ();
33+
34+ findPrime();
35+ }
36+
37+ private void dfs (int depth , int start , int candidate ) {
38+ if (depth > len) {
39+ return ;
40+ }
41+
42+ if (candidate > 0 ) {
43+ if (isPrime[candidate]) {
44+ set. add(candidate);
45+ }
46+ }
47+
48+ for (int i = 0 ; i < len; i++ ) {
49+ if (visited[i]) continue ;
50+
51+ int curNum = num. charAt(i) - ' 0' ;
52+
53+ if (curNum == 0 && depth == 0 ) continue ;
54+
55+ visited[i] = true ;
56+ dfs(depth + 1 , start + 1 , candidate * 10 + curNum);
57+ visited[i] = false ;
58+ }
59+ }
60+
61+ public int solution (String numbers ) {
62+ init(numbers);
63+ dfs(0 , 0 , 0 );
64+ return set. size();
65+ }
66+ }
67+ ```
You can’t perform that action at this time.
0 commit comments