페이지가 로드되지 않나요? 여기를 눌러보면 고쳐질 수도 있어요.
Placeholder

#4199

[swat]로봇청소기 2s 512MB

문제

새로 개발된 로봇 청소기가 있다.

 

로봇 청소기가 청소를 해야 하는 영역은 N * M 크기의 격자 모양으로 구성되어 있고 가장 왼쪽 위의 행과 열을 나타내는 좌표는 (0, 0) 이다.

 

맨 위의 행과 맨 아래 행, 가장 왼쪽 열과 가장 오른쪽 열은 모두 벽으로 구성되어 있고 중간에도 벽이나 장애물이 있으며 이들은 모두 1로 표시된다.

 

로봇 청소기는 0으로 표시된 빈 공간을 돌아다니면서 청소를 하게 된다.

 

로봇 청소기는 여러 가지 모드의 알고리즘에 의해 청소하는 순서가 달라진다.

Left_first_turn 알고리즘은 다음과 같은 방법으로 작동된다.

 

1) 현재의 위치를 먼저 청소한다.

2) 왼쪽으로 회전을 한다. 앞쪽이 장애물이 아니고 청소가 되어 있지 않다면 앞으로 전진하여 1번부터 작업을 반복한다.

3) 만약 앞쪽이 장애물이거나 이미 청소가 되어 있다면 처음 방향으로 돌아올 때까지 2번 작업을 반복한다.

4) 처음의 방향으로 돌아올 때까지 전진을 하지 못했다면 뒤로 한 칸 후진을 한 후 2번의 작업을 반복한다. 이 때 뒤쪽에 장애물이나 벽이 있다면 청소를 멈춘다.

 

로봇이 청소할 영역의 상태와 현재 로봇의 위치를 입력받아 로봇이 Left_first_turn 알고리즘에 의해 ​청소하게 되는 영역의 개수를 구하는 프로그램을 작성하라.

 


입력

첫째 줄에 세로 크기 N과 가로 크기 M이 주어진다. (3 ≤ N, M ≤ 50)
둘째 줄에 로봇청소기가 있는 칸의 좌표 (y, x)와 바라보는 방향 d가 주어진다. d가 0인 경우에는 북쪽을, 1인 경우에는 동쪽을, 2인 경우에는 남쪽을, 3인 경우에는 서쪽을 바라보고 있는 것이다.
셋째 줄부터 N * M개의 상태를 나타내는 정수 0 또는 1이 주어진다. (빈 칸은 0, 장애물은 1로 주어진다.) 지도의 첫 행, 마지막 행, 첫 열, 마지막 열은 모두 1이다.
로봇청소기가 처음에 위치한 칸은 0이다. ​

출력

로봇 청소기가 청소하는 칸의 개수를 출력한다​


예제 #1

6 6

3 2 1
1 1 1 1 1 1
1 0 1 0 0 1
1 0 0 1 0 1
1 0 0 0 0 1
1 0 0 0 0 1
1 1 1 1 1 1
12

예제 #2

10 9

2 7 0
1 1 1 1 1 1 1 1 1
1 0 1 0 0 0 0 1 1
1 0 0 0 0 1 0 0 1
1 0 1 0 0 0 0 0 1
1 0 0 1 0 1 0 0 1
1 0 0 1 1 0 0 1 1
1 0 0 0 1 0 0 1 1
1 0 0 0 0 0 1 1 1
1 0 0 0 0 0 0 0 1
1 1 1 1 1 1 1 1 1
41

로그인해야 코드를 작성할 수 있어요.