문제 : https://www.acmicpc.net/problem/14503
문제설명이 좀 복잡한 문제다.
1. 주변 4칸중 청소되지 않은 빈칸이 있는 경우,
2.주변 4칸중 청소되지 않은 빈칸이 없는경우
먼저, 지도를 li배열에 담아주고, 똑같은크기의 배열 visit를 만들어준다(청소확인용)
그리고 왼쪽으로 돌아가면서 청소가 가능한 빈칸이 있는지 찾는다.
이때, 방향회전에 주의한다!
시게 반시계방향(북,서,남,동)으로 돌아야하므로
dx,dy의 idx=0,1,2,3 -> 북동남서 에서 idx-=1씩 진행되게 (d+3*i)%4의 계산으로 세팅했다.
N,M=map(int,input().split())
dx,dy=[-1,0,1,0],[0,1,0,-1] # 0,1,2,3 북동남서
li=[]
visit=[[0]*(M) for i in range(N)]
r,c,d=map(int,input().split())
visit[r][c]=1
res=1
for i in range(N):
li.append(list(map(int,input().split())))
while True:
ch=0
for i in range(1,5):
nd=(d+3*i)%4 #방향은 계속 바꾸어 주어야한다.
nx=r+dx[nd]
ny=c+dy[nd]
if visit[nx][ny]==0 and li[nx][ny]==0:
visit[nx][ny]=1
r,c,d,ch=nx,ny,nd,1
res+=1
break
if ch==0:
nx=r+dx[d-2]
ny=c+dy[d-2]
if li[nx][ny]==0:
r,c=nx,ny
else:
break
print(res)