Skip to content

Commit 928682e

Browse files
authored
Merge pull request #872 from AlgorithmWithGod/JHLEE325
[20250912] BOJ / G5 / 톱니바퀴 (2) / 이준희
2 parents 729747d + 3f3068d commit 928682e

File tree

1 file changed

+79
-0
lines changed

1 file changed

+79
-0
lines changed
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
```java
2+
import java.io.*;
3+
import java.util.*;
4+
5+
public class Main {
6+
7+
static List<Deque<Integer>> wheel = new ArrayList<>();
8+
9+
public static void main(String[] args) throws Exception {
10+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
11+
int t = Integer.parseInt(br.readLine());
12+
13+
for (int i = 0; i < t; i++) {
14+
String line = br.readLine();
15+
Deque<Integer> dq = new LinkedList<>();
16+
for (char c : line.toCharArray()) {
17+
dq.add(c - '0');
18+
}
19+
wheel.add(dq);
20+
}
21+
22+
int k = Integer.parseInt(br.readLine());
23+
24+
for (int i = 0; i < k; i++) {
25+
StringTokenizer st = new StringTokenizer(br.readLine());
26+
int num = Integer.parseInt(st.nextToken()) - 1;
27+
int dir = Integer.parseInt(st.nextToken());
28+
29+
int[] dirs = new int[t];
30+
dirs[num] = dir;
31+
32+
for (int j = num; j > 0; j--) {
33+
int left = ((LinkedList<Integer>) wheel.get(j - 1)).get(2);
34+
int right = ((LinkedList<Integer>) wheel.get(j)).get(6);
35+
if (left != right) {
36+
dirs[j - 1] = -dirs[j];
37+
} else {
38+
break;
39+
}
40+
}
41+
42+
for (int j = num; j < t - 1; j++) {
43+
int left = ((LinkedList<Integer>) wheel.get(j)).get(2);
44+
int right = ((LinkedList<Integer>) wheel.get(j + 1)).get(6);
45+
if (left != right) {
46+
dirs[j + 1] = -dirs[j];
47+
} else {
48+
break;
49+
}
50+
}
51+
52+
for (int j = 0; j < t; j++) {
53+
if (dirs[j] != 0) {
54+
rotate(j, dirs[j]);
55+
}
56+
}
57+
}
58+
59+
int score = 0;
60+
for (int i = 0; i < t; i++) {
61+
if (wheel.get(i).peekFirst() == 1) {
62+
score++;
63+
}
64+
}
65+
System.out.println(score);
66+
}
67+
68+
public static void rotate(int idx, int dir) {
69+
if (dir == 1) {
70+
int last = wheel.get(idx).pollLast();
71+
wheel.get(idx).addFirst(last);
72+
} else {
73+
int first = wheel.get(idx).pollFirst();
74+
wheel.get(idx).addLast(first);
75+
}
76+
}
77+
}
78+
79+
```

0 commit comments

Comments
 (0)