#include <bits/stdc++.h>
#define FASTIO ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)
using namespace std;
int k, n, dir, res, cnt = 1;
string s[5];
bool flag[5];
void rev (int idx, int d){
if (d == 1){
int tmp = s[idx][7];
for (int i = 7; i > 0; i--)
s[idx][i] = s[idx][i - 1];
s[idx][0] = tmp;
}
else{
int tmp = s[idx][0];
for (int i = 1; i < 8; i++)
s[idx][i - 1] = s[idx][i];
s[idx][7] = tmp;
}
}
int main(){
FASTIO;
for (int i = 1; i <= 4; i++) cin >> s[i];
cin >> k;
for (int i = 0; i < k; i++){
memset(flag, 0, sizeof(flag));
cin >> n >> dir;
for (int j = n - 1; j >= 1; j--){
if (s[j][2] != s[j + 1][6]) flag[j] = true;
else break;
}
for (int j = n + 1; j <= 4; j++){
if (s[j - 1][2] != s[j][6]) flag[j] = true;
}
rev(n, dir);
int tmp = dir;
for (int j = n - 1; j >= 1; j--){
tmp *= -1;
if (flag[j]) rev(j, tmp);
else break;
}
for (int j = n + 1; j <= 4; j++){
dir *= -1;
if (flag[j]) rev(j, dir);
else break;
}
}
for (int i = 1; i <= 4; i++){
if (s[i][0] == '1') res += cnt;
cnt *= 2;
}
cout << res;
return 0;
}
1. 돌아가는 톱니바퀴를 중심으로 flag를 확인한다.
2. 톱니바퀴에서 양쪽으로 rev를 돌린다.
3. 점수를 구한다.
팀원과 스터디를 하면서 rev함수를 새로운 배열을 만들어서 전달해주는 것도 깔끔하게 보기 좋은 것 같았다. 그리고 재귀적인 형태로 시작점을 중심으로 양쪽으로 호출해서 돌게하는 방법으로 구현할 수 있다는 것도 알았다.
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ] 14890번 경사로 (2) | 2024.07.14 |
---|---|
[BOJ] 14499번 주사위 굴리기 (1) | 2024.07.14 |
[BOJ] 2504번 괄호의 값 (0) | 2024.07.10 |
[BOJ] 18115번 카드 놓기 (0) | 2024.07.10 |
[BOJ] 31802번 주기 함수 (Easy) (0) | 2024.07.10 |