제목에 적힌 문제입니다. 시뮬레이션 구현을 요구하는 문제입니다.
일단 문제에 조건이 상당히 많아서 정말 꼼꼼히 읽고 꼼꼼히 설계하고 풀어야하는 문제였습니다.
저는 설계를 꼼꼼히 하지 않아서 디버깅을 하는데 많은 시간을 사용했습니다.
제가 생각을 잘 못 했던 부분은 아래 그림과 같습니다.

구현할때 방향이 바뀌지 않도록 구현했어야 했는데 꼼꼼하게 설계하지 않아서 디버깅하는데 많은 시간이 소요됐습니다.
다들 화이팅...!
N, M = map(int, input().split())
pr, pc, pd = map(int, input().split())
brd = [list(map(int, input().split())) for _ in range(N)]
ds = [[-1, 0], [0, 1], [1, 0], [0, -1]]
result = 0
while True:
# 현재 위치를 청소한다.
if brd[pr][pc] == 0:
brd[pr][pc] = 2
result += 1
# 왼쪽 공간 탐색
flag = False
for i in range(4):
pd = (pd + 3) % 4
ndr, ndc = ds[pd]
if brd[pr+ndr][pc+ndc] == 0:
pr, pc = pr+ndr, pc+ndc
flag = True
break
# 네 방향 모두 갈 수 없는 경우
if not flag:
tmppd = (pd+2) % 4
ndr, ndc = ds[tmppd]
if brd[pr+ndr][pc+ndc] != 1:
pr, pc = pr+ndr, pc+ndc
else:
break
print(result)