https://www.acmicpc.net/problem/31404
먼지가 있으면 규칙표 A, 없으면 규칙표 B를 따른다.
여기서 중요한 것이, 같은 곳에서 같은 방향으로 여러 번 이동할 수 있다는 것이다.
단, 먼지를 청소하지 못하고 무의미하게 사이클을 도는 것은 처리해줘야한다.
import sys
r=sys.stdin.readline
dx = [0, 1, 0, -1]
dy = [-1, 0, 1, 0]
H,W=map(int,r().split())
R,C,D=map(int,r().split())
dust = [[1]*W for _ in range(H)]
visit = [[[0]*4 for _ in range(W)] for _ in range(H)]
A=[]
for _ in range(H):
A.append(list(map(int,list(r().rstrip()))))
B=[]
for _ in range(H):
B.append(list(map(int,list(r().rstrip()))))
ans=dummy=clear=0
while 1:
if dust[R][C]:
dust[R][C] = 0
D = (D + A[R][C])%4
clear+=1
dummy=0
else:
D = (D + B[R][C])%4
if visit[R][C][D] == clear:
break
visit[R][C][D] = clear
dummy+=1
R += dy[D]
C += dx[D]
ans+=1
if not (0 <= R < H) or not (0 <= C < W):
break
print(ans-dummy)