구현 + 재귀에 관한 내용이 있는 문제
어떤 바퀴를 돌릴때 왼쪽, 오른쪽을 확인해야 하는데,
바퀴를 돌려놓고 나서 왼쪽 오른쪽을 돌리려면 이미 틀어진 바퀴로 확인을 해야하기 때문에 정확하지 않다.
그러므로 재귀를 통해 제일 왼쪽과 오른쪽을 찾고 바퀴를 돌려나가는 방식으로 진행하였다.
돌리는 방식은 deque 라이브러리의 rotate 함수를 이용하였다.
from collections import deque
blade = {}
for i in range(1,5):
blade[i] = deque((list(map(int,input()))))
k = int(input())
rotation = []
for i in range(k):
rotation.append(list(map(int,input().split())))
def dfs_left(start,direction):
if start < 1 or blade[start+1][6] == blade[start][2]:
return
if blade[start+1][6] != blade[start][2]:
dfs_left(start-1, -direction)
blade[start].rotate(direction)
def dfs_right(start,direction):
if start > 4 or blade[start-1][2] == blade[start][6]:
return
if blade[start-1][2] != blade[start][6]:
dfs_right(start+1, -direction)
blade[start].rotate(direction)
for rotate in rotation:
x, direction = rotate
dfs_left(x-1,-direction)
dfs_right(x+1,-direction)
blade[x].rotate(direction)
answer = 0
for i in range(1,5):
if blade[i][0] == 1:
answer += 2**(i-1)
print(answer)