p.119
N,M=map(int, input().split()) # N x M의 칸
A,B,direction=map(int, input().split()) # (A,B) 좌표, d 방향
d=[[0]*M for _ in range(N)]
d[A][B]=1
table=[]
for i in range(N):
table.append(list(map(int, input().split()))) # 0 육지, 1 바다
dA=[-1, 0, 1, 0]
dB=[0, 1, 0, -1]
# 왼쪽으로 회전
def turn_left():
global direction
direction -= 1
if direction==-1:
direction=3
#시뮬레이션 시작
count=1 # 방문한 칸의 갯수
turn_time=0
while True:
turn_left()
nA=A+dA[direction]
nB=B+dB[direction]
if d[nA][nB]==0 and table[nA][nB]==0: #가보지 않았고, 육지인 경우
d[nA][nB]=1
A=nA
B=nB
count+=1
turn_time=0
continue
else:
turn_time+=1
if turn_time==4: # 네 방향 모두 못가는 경우
nA=A-dA[direction]
nB=B-dB[direction]
if table[nA][nB]==0:
A=nA
B=nB
else:
break
turn_time=0
print(count)
댓글