로봇 청소기와 방의 상태가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오.
로봇 청소기가 있는 방은 크기의 직사각형으로 나타낼 수 있으며, 크기의 정사각형 칸으로 나누어져 있다. 각각의 칸은 벽 또는 빈 칸이다.
청소기는 바라보는 방향이 있으며, 이 방향은 동, 서, 남, 북 중 하나이다. 방의 각 칸은 좌표
로 나타낼 수 있고, 가장 북쪽 줄의 가장 서쪽 칸의 좌표가 , 가장 남쪽 줄의 가장 동쪽 칸의 좌표가 이다. 즉, 좌표 는 북쪽에서 번째에 있는 줄의 서쪽에서 번째 칸을 가리킨다. 처음에 빈 칸은 전부 청소되지 않은 상태이다.
로봇 청소기는 다음과 같이 작동한다.
# 14503
import sys
input = lambda: sys.stdin.readline().strip()
# 1. 현재 칸이 청소 X -> 청소 (arr[r][c] == 2 : 청소 완료)
# 2. 주변 4칸 중 빈칸 체크
# 3. 빈칸 O -> 반시계 90 회전 후 빈칸이라면 전진
# 4. 빈칸 X -> 후진 or 정지
n, m = map(int, input().split())
r, c, d = map(int, input().split())
dr, dc = [-1, 0, 1, 0], [0, 1, 0, -1]
arr = [list(map(int, input().split())) for _ in range(n)]
num = 0
check = True
while check:
if arr[r][c] == 0:
arr[r][c] = 2
num += 1
else:
clean = False
for i in range(4):
nr, nc = r + dr[i], c + dc[i]
if nr < 0 or nc < 0 or nr >= n or nc >= m or arr[nr][nc] == 1:
continue
if arr[nr][nc] == 0:
clean = True
break
if clean:
d -= 1
if d < 0:
d += 4
nr, nc = r + dr[d], c + dc[d]
if 0 <= nr < n and 0 <= nc < m and arr[nr][nc] == 0:
r, c = nr, nc
else:
nr, nc = r - dr[d], c - dc[d]
if 0 <= nr < n and 0 <= nc < m and arr[nr][nc] != 1:
r, c = nr, nc
else:
check = False
print(num)