Skip to content

Commit 561cfd4

Browse files
committed
[20251107] PGM / LV2 / 소수 찾기 / 김민진
1 parent 5b13ce6 commit 561cfd4

File tree

1 file changed

+67
-0
lines changed

1 file changed

+67
-0
lines changed
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
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+
```

0 commit comments

Comments
 (0)