이번 문제는 deque의 rotate함수를 활용하여 해결하였다. 회전시킬 톱니바퀴를 기준으로 왼쪽에 해당하는 톱니바퀴들을 순회하며 맞닿는 부분의 값이 다를 경우에는 l_chain리스트에 인덱스를 담고, 아닐 경우 순회를 종료하였다. 또한 오른쪽에 해당하는 톱니바퀴들을 순회하며 맞닿는 부분의 값이 다를 경우에 r_chain리스트에 인덱스를 담고, 아닐 경우 순회를 종료하였다. 이 과정이 끝나면, l_chain과 r_chain을 각각 순회하며 rotate해주었다. 이때 방향은 매 반복마다 -1을 곱하여 반전을 주었다.
from collections import deque
t = int(input())
wh = [deque(list(str(input()))) for _ in range(t)]
k = int(input())
coms = [list(map(int, input().split())) for _ in range(k)]
def rotating(num, d):
l_chain = []
r_chain = []
for i in range(num, 0, -1):
if wh[i][6] != wh[i-1][2]:
l_chain.append(i-1)
else:
break
for i in range(num, t-1):
if wh[i][2] != wh[i+1][6]:
r_chain.append(i+1)
else:
break
wh[num].rotate(d)
tmp_d = d
for nxt in l_chain:
tmp_d *= -1
wh[nxt].rotate(tmp_d)
tmp_d = d
for nxt in r_chain:
tmp_d *= -1
wh[nxt].rotate(tmp_d)
for num, d in coms:
visited = [False for _ in range(t)]
rotating(num-1, d)
answer = 0
for i in range(t):
if wh[i][0] == '1':
answer += 1
print(answer)