/*
1. 배열 정보 정상 입력 확인
2. rotate 함수 정상 작동 확인
*/
#include <stdio.h>
void solve(int num, int dir);
void rotate(int num, int dir);
void init();
int arr[5][9];
int rotateArr[101][3]; //회전 저장
int visit[5];
int T;
int K;
int score;
int main()
{
scanf("%d", &T);
for (int tc = 1; tc <= T; tc++){
init();
scanf(" %d", &K);
//0행 0열 제외하고 톱니 배열 입력
for (int i = 1; i <= 4; i++){
for (int j = 1; j <= 8; j++){
scanf(" %1d", &arr[i][j]);
}
}
//0행, 0열 제외하고 회전 정보 저장
for (int i = 1; i <= K; i++){
for (int j = 1; j <= 2; j++){
scanf(" %d", &rotateArr[i][j]);
}
}
for (int i = 1; i <= K; i++){
solve(rotateArr[i][1], rotateArr[i][2]);
visit[1] = 0; visit[2] = 0; visit[3] = 0; visit[4] = 0;
}
//rotate(1, -1);
///*배열 정상 입력 체크 완료*/
//for (int i = 1; i <= 4; i++){
// for (int j = 1; j <= 8; j++){
// //printf("%d ", rotateArr[i][j]);
// printf("%d ", arr[i][j]);
// }
// printf("\n");
//}
//점수 계산
for (int i = 1; i <= 4; i++){
//S극이 1이다.
if (arr[i][1] == 1){
score += 1 << i - 1;
}
}
printf("#%d %d\n", tc,score);
}
return 0;
}
void solve(int num, int dir){
//톱니 방문 체크
visit[num] = 1;
//바퀴를 회전한다.
rotate(num, dir);
int naver1, naver2;
naver1 = num - 1, naver2 = num + 1;
//기준의 왼쪽 톱니
if (naver1 >= 1 && visit[naver1] == 0){
//이웃한 톱니가 다른 극이라면, 해당 톱니 기존과 반대 방향으로 회전
if (arr[naver1][3] != arr[num][7 + dir]){
solve(naver1, dir*(-1));
}
}
//기준의 오른쪽 톱니
if (naver2 <= 4 && visit[naver2] == 0){
//이웃한 톱니가 다른 극이라면, 해당 톱니 기존과 반대 방향으로 회전
if (arr[num][3 + dir] != arr[naver2][7]){
solve(naver2, dir*(-1));
}
}
}
//dir 1 : 시계방향
//dir 2 : 반시계방향
void rotate(int num, int dir){
//기존 톱니번호 저장
int tempArr[9] = { 0, };
for (int i = 1; i <= 8; i++)
tempArr[i] = arr[num][i];
switch (dir){
//시계방향 회전
case 1:
for (int i = 1; i <= 7; i++){
arr[num][i + 1] = tempArr[i];
}
arr[num][1] = tempArr[8];
break;
//반시계방향 회전
case -1:
for (int i = 7; i >= 1; i--){
arr[num][i] = tempArr[i + 1];
}
arr[num][8] = tempArr[1];
break;
}
}
void init()
{
for (int i = 1; i <= 4; i++){
for (int j = 1; j <= 8; j++){
arr[i][j] = 0;
}
}
//0행, 0열 제외하고 회전 정보 저장
for (int i = 1; i <= K; i++){
for (int j = 1; j <= 2; j++){
rotateArr[i][j] = 0;
}
}
score = 0;
}
'이것저것' 카테고리의 다른 글
백준 2146 다리만들기 (0) | 2018.04.14 |
---|---|
SW 2477 차량 정비소 문제 (0) | 2018.04.12 |
SW 3304 최장공통부분수열 [D3] (0) | 2018.04.02 |
백준 2178 미로탐색 (0) | 2018.04.01 |
SW 4050 재광이의 대량 할인 [D4] (0) | 2018.03.30 |
댓글