๐งฉ Baekjoon 14891 - ํฑ๋๋ฐํด
๋ฌธ์
์ด 8๊ฐ์ ํฑ๋๋ฅผ ๊ฐ์ง๊ณ ์๋ ํฑ๋๋ฐํด 4๊ฐ๊ฐ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์ผ๋ ฌ๋ก ๋์ฌ์ ธ ์๋ค. ๋,ย ํฑ๋๋ N๊ทน ๋๋ S๊ทน ์ค ํ๋๋ฅผ ๋ํ๋ด๊ณ ์๋ค. ํฑ๋๋ฐํด์๋ ๋ฒํธ๊ฐ ๋งค๊ฒจ์ ธ ์๋๋ฐ, ๊ฐ์ฅ ์ผ์ชฝ ํฑ๋๋ฐํด๊ฐ 1๋ฒ, ๊ทธ ์ค๋ฅธ์ชฝ์ 2๋ฒ, ๊ทธ ์ค๋ฅธ์ชฝ์ 3๋ฒ, ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ํฑ๋๋ฐํด๋ 4๋ฒ์ด๋ค.
์ด๋, ํฑ๋๋ฐํด๋ฅผ ์ด K๋ฒ ํ์ ์ํค๋ ค๊ณ ํ๋ค. ํฑ๋๋ฐํด์ ํ์ ์ ํ ์นธ์ ๊ธฐ์ค์ผ๋ก ํ๋ค. ํ์ ์ ์๊ณ ๋ฐฉํฅ๊ณผ ๋ฐ์๊ณ ๋ฐฉํฅ์ด ์๊ณ , ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ํ์ ํ๋ค.
ํฑ๋๋ฐํด๋ฅผ ํ์ ์ํค๋ ค๋ฉด, ํ์ ์ํฌ ํฑ๋๋ฐํด์ย ํ์ ์ํฌ ๋ฐฉํฅ์ ๊ฒฐ์ ํด์ผ ํ๋ค. ํฑ๋๋ฐํด๊ฐ ํ์ ํ ๋, ์๋ก ๋ง๋ฟ์ ๊ทน์ ๋ฐ๋ผ์ ์์ ์๋ ํฑ๋๋ฐํด๋ฅผ ํ์ ์ํฌ ์๋ ์๊ณ , ํ์ ์ํค์ง ์์ ์๋ ์๋ค. ํฑ๋๋ฐํด A๋ฅผ ํ์ ํ ๋, ๊ทธ ์์ ์๋ ํฑ๋๋ฐํด B์ ์๋ก ๋ง๋ฟ์ ํฑ๋์ ๊ทน์ด ๋ค๋ฅด๋ค๋ฉด, B๋ A๊ฐ ํ์ ํ ๋ฐฉํฅ๊ณผ ๋ฐ๋๋ฐฉํฅ์ผ๋ก ํ์ ํ๊ฒ ๋๋ค. ์๋ฅผ ๋ค์ด, ์๋์ ๊ฐ์ ๊ฒฝ์ฐ๋ฅผ ์ดํด๋ณด์.
๋ ํฑ๋๋ฐํด์ ๋ง๋ฟ์ ๋ถ๋ถ์ ์ด๋ก์ ์ ์ ์ผ๋ก ๋ฌถ์ฌ์๋ ๋ถ๋ถ์ด๋ค. ์ฌ๊ธฐ์, 3๋ฒ ํฑ๋๋ฐํด๋ฅผย ๋ฐ์๊ณ ๋ฐฉํฅ์ผ๋ก ํ์ ํ๋ค๋ฉด, 4๋ฒ ํฑ๋๋ฐํด๋ ์๊ณ ๋ฐฉํฅ์ผ๋ก ํ์ ํ๊ฒ ๋๋ค. 2๋ฒ ํฑ๋๋ฐํด๋ ๋ง๋ฟ์ ๋ถ๋ถ์ด S๊ทน์ผ๋ก ์๋ก ๊ฐ๊ธฐ ๋๋ฌธ์, ํ์ ํ์ง ์๊ฒ ๋๊ณ , 1๋ฒ ํฑ๋๋ฐํด๋ 2๋ฒ์ด ํ์ ํ์ง ์์๊ธฐ ๋๋ฌธ์, ํ์ ํ์ง ์๊ฒ ๋๋ค. ๋ฐ๋ผ์, ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ ๋ชจ์์ ๋ง๋ค๊ฒ ๋๋ค.
์์ ๊ฐ์ย ์ํ์์ 1๋ฒ ํฑ๋๋ฐํด๋ฅผ ์๊ณ ๋ฐฉํฅ์ผ๋ก ํ์ ์ํค๋ฉด, 2๋ฒ ํฑ๋๋ฐํด๊ฐ ๋ฐ์๊ณ ๋ฐฉํฅ์ผ๋ก ํ์ ํ๊ฒ ๋๊ณ , 2๋ฒ์ด ํ์ ํ๊ธฐ ๋๋ฌธ์, 3๋ฒ๋ ๋์์ ์๊ณ ๋ฐฉํฅ์ผ๋ก ํ์ ํ๊ฒ ๋๋ค. 4๋ฒ์ 3๋ฒ์ด ํ์ ํ์ง๋ง, ๋ง๋ฟ์ ๊ทน์ด ๊ฐ๊ธฐ ๋๋ฌธ์ ํ์ ํ์ง ์๋๋ค. ๋ฐ๋ผ์, ์๋์ ๊ฐ์ ์ํ๊ฐ ๋๋ค.
ํฑ๋๋ฐํด์ ์ด๊ธฐ ์ํ์ ํฑ๋๋ฐํด๋ฅผ ํ์ ์ํจ ๋ฐฉ๋ฒ์ด ์ฃผ์ด์ก์ ๋, ์ต์ข ํฑ๋๋ฐํด์ ์ํ๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ 1๋ฒ ํฑ๋๋ฐํด์ ์ํ, ๋์งธ ์ค์ 2๋ฒ ํฑ๋๋ฐํด์ ์ํ, ์ ์งธ ์ค์ 3๋ฒ ํฑ๋๋ฐํด์ ์ํ, ๋ท์งธ ์ค์ 4๋ฒ ํฑ๋๋ฐํด์ ์ํ๊ฐ ์ฃผ์ด์ง๋ค. ์ํ๋ 8๊ฐ์ ์ ์๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ , 12์๋ฐฉํฅ๋ถํฐ ์๊ณ๋ฐฉํฅ ์์๋๋ก ์ฃผ์ด์ง๋ค. N๊ทน์ 0, S๊ทน์ 1๋ก ๋ํ๋์๋ค.
๋ค์ฏ์งธ ์ค์๋ ํ์ ํ์ K(1 โค K โค 100)๊ฐ ์ฃผ์ด์ง๋ค. ๋ค์ K๊ฐ ์ค์๋ ํ์ ์ํจ ๋ฐฉ๋ฒ์ด ์์๋๋ก ์ฃผ์ด์ง๋ค. ๊ฐ ๋ฐฉ๋ฒ์ ๋ ๊ฐ์ ์ ์๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ , ์ฒซ ๋ฒ์งธ ์ ์๋ ํ์ ์ํจ ํฑ๋๋ฐํด์ ๋ฒํธ, ๋ ๋ฒ์งธ ์ ์๋ ๋ฐฉํฅ์ด๋ค. ๋ฐฉํฅ์ด 1์ธ ๊ฒฝ์ฐ๋ ์๊ณ ๋ฐฉํฅ์ด๊ณ , -1์ธ ๊ฒฝ์ฐ๋ ๋ฐ์๊ณ ๋ฐฉํฅ์ด๋ค.
์ถ๋ ฅ
์ด K๋ฒ ํ์ ์ํจ ์ดํ์ ๋ค ํฑ๋๋ฐํด์ ์ ์์ ํฉ์ย ์ถ๋ ฅํ๋ค. ์ ์๋ ๋ค์๊ณผ ๊ฐ์ด ๊ณ์ฐํ๋ค.
- 1๋ฒ ํฑ๋๋ฐํด์ 12์๋ฐฉํฅ์ด N๊ทน์ด๋ฉด 0์ , S๊ทน์ด๋ฉด 1์
- 2๋ฒ ํฑ๋๋ฐํด์ 12์๋ฐฉํฅ์ด N๊ทน์ด๋ฉด 0์ , S๊ทน์ด๋ฉด 2์
- 3๋ฒ ํฑ๋๋ฐํด์ 12์๋ฐฉํฅ์ด N๊ทน์ด๋ฉด 0์ , S๊ทน์ด๋ฉด 4์
- 4๋ฒ ํฑ๋๋ฐํด์ 12์๋ฐฉํฅ์ด N๊ทน์ด๋ฉด 0์ , S๊ทน์ด๋ฉด 8์
์์
โ ์ ๋ ฅ 1
1
2
3
4
5
6
7
10101111
01111101
11001110
00000010
2
3 -1
1 1
โ ์ถ๋ ฅ 1
1
7
โ ์ ๋ ฅ 2
1
2
3
4
5
6
7
8
11111111
11111111
11111111
11111111
3
1 1
2 1
3 1
โ ์ถ๋ ฅ 2
1
15
โ ์ ๋ ฅ 3
1
2
3
4
5
6
7
8
9
10
10001011
10000011
01011011
00111101
5
1 1
2 1
3 1
4 1
1 -1
โ ์ถ๋ ฅ 3
1
6
โ ์ ๋ ฅ 4
1
2
3
4
5
6
7
8
9
10
11
12
13
10010011
01010011
11100011
01010101
8
1 1
2 1
3 1
4 1
1 -1
2 -1
3 -1
4 -1
โ ์ถ๋ ฅ 4
1
5
์์ฑ ์ฝ๋
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Objects;
import java.util.StringTokenizer;
public class Main {
private static final CogWheel[] wheels = new CogWheel[4];
private static final int[] rotateDirections = new int[4];
public static void main(String[] args) throws IOException {
// 1. ๋ณ์ ์ ์ธ ๋ฐ ์ด๊ธฐํ
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int result = 0;
// 2. ํฑ๋๋ฐํด ์ด๊ธฐํ
initCogWheel(br);
// 3. ํ
์คํธ ์ผ์ด์ค ์ฒ๋ฆฌ
int k = Integer.parseInt(br.readLine());
for (int i = 0; i < k; i++) {
// ๋ณ์ ์ ์ธ ๋ฐ ์ด๊ธฐํ
StringTokenizer st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
// ํ์ ๋ฐฉํฅ ์ด๊ธฐํ
for (int j = 0; j < 4; j++) rotateDirections[j] = 0;
rotateDirections[a - 1] = b;
// ์์ชฝ์ผ๋ก ์ ํ
leftWave(a);
rightWave(a);
// ํ์ ์ฒ๋ฆฌ
processRotate();
}
// 4. ๊ฒฐ๊ณผ ์ฒ๋ฆฌ
for (int j = 0; j < 4; j++) {
if (wheels[j].getAt(0) == 1) result += (1 << j);
}
// 5. ์ถ๋ ฅ
System.out.println(result);
}
private static void initCogWheel(BufferedReader br) throws IOException {
for (int i = 0; i < 4; i++) {
wheels[i] = new CogWheel();
String line = br.readLine();
for (int j = 0; j < 8; j++) {
wheels[i].enqueue(j, line.charAt(j) - '0');
}
}
}
private static void leftWave(int a) {
for (int i = a - 2; i >= 0; i--) {
if (!Objects.equals(wheels[i].getAt(2), wheels[i + 1].getAt(6))) {
rotateDirections[i] = -rotateDirections[i + 1];
} else {
break;
}
}
}
private static void processRotate() {
for (int i = 0; i < 4; i++) {
if (rotateDirections[i] == 1) wheels[i].rotate();
else if (rotateDirections[i] == -1) wheels[i].rotateReverse();
}
}
private static void rightWave(int a) {
for (int i = a; i < 4; i++) {
if (!Objects.equals(wheels[i - 1].getAt(2), wheels[i].getAt(6))) {
rotateDirections[i] = -rotateDirections[i - 1];
} else {
break;
}
}
}
private static class CogWheel {
private final int[] data;
private int front;
private final int capacity = 8;
public CogWheel() {
this.data = new int[capacity];
this.front = 0;
}
public void enqueue(int index, int item) {
data[index] = item;
}
public void rotate() {
front = (front - 1 + capacity) % capacity;
}
public void rotateReverse() {
front = (front + 1) % capacity;
}
public int getAt(int index) {
int actualIndex = (front + index) % capacity;
return data[actualIndex];
}
}
}
rotate()
๋ฉ์๋์ ๊ฒฝ์ฐ(front - 1) % capacity
์ฐ์ฐ์ด ์์๋ฅผ ๊ฐ์ง ์ ์์ดcapacity
๋ฅผ ๋ํด์ ๋ฐฉ์งํ์๋ค.- ์ํ ํ๋ฅผ ๊ตฌํํ์๋๋ฐ, ๋ฐ์ดํฐ์ ๋ณํ๊ฐ ์์ผ๋ฏ๋ก ํฌ์ธํฐ๋ง ์ด๋ํ๋๋ก ์ฒ๋ฆฌํ๋ค.