문제1639--인공지능 청소기 (생기부작성)

1639: 인공지능 청소기 (생기부작성)

[만든사람 : 삼성 SW역랑 테스트 문제]
시간제한 : 1.000 sec  메모리제한 : 128 MiB

문제 설명

인공지능 청소기와 방의 상태가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오.

인공지능 청소기가 있는 방은 N x M 크기를 입력 받으며 각각 1x1 크기의 정사각형으로 나누어져 있다.

각각의 칸은 장애물(벽) 또는 빈칸 이다.

청소기는 동서남북 중 하나를 바라보고 있다.

각 칸은 좌표 r,c로 나타낼 수 있다.

가장 북서쪽0,0 이다.

가장 남동쪽N-1, M-1 이다.

즉, r,c 좌표는 북쪽에서 r+1번째 줄 이며, 서쪽에서 c+1번째 줄이다.


인공지능 청소기의 작동방식은 다음과 같다.

1. 현재 칸이 아직 청소되지 않은 경우, 현재 칸을 청소한다.

2. 현재 칸의 주변 4칸 중 청소되지 않은 빈 칸이 없는 경우,

    1) 바라보는 방향을 유지한 채로 한 칸 후진할 수 있다면 한칸 후진하고 1번으로 돌아간다.

    2) 바라보는 방향의 뒤쪽 칸이 벽이라 후진할 수 없다면 작동을 멈춘다.

3. 현재 칸의 주변 4칸 중 청소되지 않은 빈 칸이 있는 경우,

    1. 반시계 방향으로 90도 회전한다.

    2. 바라보는 방향을 기준으로 앞쪽 칸이 청소되지 않은 빈 칸인 경우 한 칸 전진한다.

    3. 1번으로 돌아간다.  


입력 설명

첫째 줄 방의 크기 N과 M이 입력된다. (입력 값은 3이상 50이하이다.) 

둘째 줄에 처음에 인공지능 청소기가 있는 칸의 좌표 r,c와 처음에 로봇 청소기가 바라보는 방향 d가 입력된다. 

d가 0이면 북쪽 

1이면 동쪽 

2이면 남쪽 

3이면 서쪽을 바라보고 있다.

셋째 줄 부터 N개의 줄에 각 장소의 상태를 나타내는 N X M 개의 값이 한 줄에 M개씩 입력된다. 

값이 0인 경우는 청소되지 않은 칸이며 1인경우에는 벽이 있는 것이다.

방의 가장 동서남북 줄 중 하나 이상에 위치한 모든 칸에는 벽이 있다. (즉, 벽으로 둘러 쌓여있다.) 

인공지능 로봇은 항상 벽이 없는 곳에서 시작한다.

출력 설명

로봇 청소기가 작동을 시작한 후 작동을 멈출 때까지 청소하는 칸의 개수를 출력한다.

입력 예시 Copy

11 10
7 4 0
1 1 1 1 1 1 1 1 1 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 1 1 1 1 0 1
1 0 0 1 1 0 0 0 0 1
1 0 1 1 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 1 0 1
1 0 0 0 0 0 1 1 0 1
1 0 0 0 0 0 1 1 0 1
1 0 0 0 0 0 0 0 0 1
1 1 1 1 1 1 1 1 1 1

출력 예시 Copy

57

출처/분류