Skip to content

Commit 27fd68e

Browse files
authored
Merge pull request #1004 from AlgorithmWithGod/LiiNi-coder
[20250929] BOJ / G5 / 십자뒤집기 / 이인희
2 parents 12e1fae + a7f963e commit 27fd68e

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
```java
2+
import java.io.*;
3+
import java.util.*;
4+
import java.util.stream.IntStream;
5+
6+
public class Main {
7+
private static int N = 3;
8+
public static void main(String[] args) throws IOException {
9+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
10+
int T = Integer.parseInt(br.readLine());
11+
while(T-- > 0){
12+
var map = 0;
13+
for(int r = 0; r < N; r++) {
14+
char[] cs = br.readLine().toCharArray();
15+
for (int c = 0; c < N; c++) {
16+
if (cs[c] == '*')
17+
map += 1<<(N*r + c);
18+
}
19+
}
20+
System.out.println(solve(map));
21+
}
22+
br.close();
23+
}
24+
25+
private static int solve(int initialMap) {
26+
boolean[] visited = new boolean[512];
27+
Deque<int[]> q = new ArrayDeque<>();
28+
q.add(new int[]{initialMap, 0});
29+
visited[initialMap] = true;
30+
while(!q.isEmpty()){
31+
int[] temp = q.poll();
32+
int map = temp[0], count = temp[1];
33+
if(map == 0){
34+
return count;
35+
}
36+
for(int di: IntStream.range(0, 9).toArray()){
37+
int nextMap = toggle(map, di);
38+
if(visited[nextMap]) continue;
39+
visited[nextMap] = true;
40+
q.add(new int[]{nextMap, count+1});
41+
}
42+
}
43+
return -1;
44+
}
45+
46+
private static int toggle(int map, int black1d) {
47+
List<Integer> masks = new ArrayList<>();
48+
masks.add(black1d);
49+
if(black1d % N == 0){
50+
masks.add(black1d + 1);
51+
}else if(black1d % N == 1){
52+
masks.add(black1d + 1);
53+
masks.add(black1d-1);
54+
}else{
55+
masks.add(black1d-1);
56+
}
57+
58+
if(black1d / N == 0){
59+
masks.add(black1d + N);
60+
}else if(black1d / N == 1){
61+
masks.add(black1d - N);
62+
masks.add(black1d + N);
63+
}else{
64+
masks.add(black1d-N);
65+
}
66+
67+
for(int mask: masks){
68+
map ^= 1<<mask;
69+
}
70+
return map;
71+
}
72+
}
73+
74+
```

0 commit comments

Comments
 (0)