알고리즘/백준
14891. 톱니바퀴
혬혬
2020. 10. 14. 22:36
728x90
#include <iostream>
using namespace std;
int check[6] = { 0 }; //돌려야되는 것을 체크
int wheel[6][10] = { 0 };
void right(int i) { // 오른쪽에 돌려야 되는 것이 있는 지 확인한다.
if (i ==5)
return;
if (wheel[i - 1][2] != wheel[i][6]) {
if (check[i - 1] == -1)
check[i] = 1;
else
check[i] = -1;
right(i + 1);
}
}
void left(int i) { // 왼쪽에 돌려야되는 것이 잇는 지 확인한다.
if (i == 0)
return;
if (wheel[i + 1][6] != wheel[i][2]) {
if (check[i + 1] == -1)
check[i] = 1;
else
check[i] = -1;
left(i - 1);
}
}
void rotation(int i, int r) {
int temp = 0;
if (r == 1) {
temp = wheel[i][7];
for (int k =7; k >0; k--) {
wheel[i][k] = wheel[i][k-1];
}
wheel[i][0] = temp;
}
else {
temp = wheel[i][0];
for (int k = 0; k <8; k++) {
wheel[i][k] = wheel[i][k + 1];
}
wheel[i][7] = temp;
}
}
int main() {
freopen("inp.inp", "r", stdin);
freopen("out.out", "w", stdout);
for (int i = 1; i <= 4; i++) {
for (int j = 0; j < 8; j++) {
char a;
scanf("%c", &a);
wheel[i][j] = a-'0';
}
char buf;
scanf("%c", &buf);
}
int k = 0;
cin >> k;
for (int i = 0; i < k; i++) {
int a, b;
cin >> a >> b;
check[a] = b;
right(a + 1);
left(a - 1);
for (int i = 1; i < 5; i++) {
if (check[i] != 0) {
rotation(i, check[i]); //체크된 값에 따라 돌린다
check[i] = 0;
}
}
}
int answer = 0;
int score = 1;
for (int i = 1; i <= 4; i++) {
if (wheel[i][0] == 1)
answer += score;
score *= 2;
}
cout << answer;
return 0;
}
728x90