336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
[문제요약]
로봇 청소기(이하 로봇)가 주어 졌을 때 청소하는 영역의 개수를 구하는 프로그램 작성한다.
로봇이 있는 장소는 N * M 크기 직사각형으로 나타낸다. 1 * 1 크기의 정사각형 칸으로 나누어져 있다.
각각의 칸은 벽(1) 또는 빈칸(0) 이다.
로봇은 바라보는 방향이 존재한다. 방향은 북(0), 동(1), 남(2), 서(3) 중 하나이다.
아래 조건과 같이 작동한다.
- 현재위치를 청소한다.
- [조건 1] 현재위치가 청소되어 있다면, 현재 위치에서 현재 방향을 기준, 왼쪽방향부터 차례대로 탐색을 진행한다.
- 왼쪽 방향에 아직 청소하지 않은 공간이 존재하면, 그 방향으로 회전한 후 한 칸 전진 후 [조건 1]을 진행한다.
- 왼쪽 방향에 청소할 위치가 없다면, 그 방향으로 회전 후 [조건 2-1]로 돌아간다.
- 4-방향이 모두 청소가 되어있거나 벽인 경우, 바라보는 방향을 유지한 채 한 칸 후진하고 [조건 2-1]로 돌아간다.
- 4-방향이 모두 청소가 이미 되어있거나 벽이면서, 뒤쪽 방향이 벽이라 후진도 할 수 없는 경우 작동을 멈춘다.
로봇은 이미 청소되어있는 칸을 또 청소할 수 없고, 벽을 통과할 수 없다.
[입력]
세로(행) 크기 N, 가로(열) 크기 M 이 주어진다. N,M~[3, 50]
로봇이 있는 좌표와 방향이 주어진다.
로봇이 청소할 N*M의 정보가 주어진다.
[출력]
로봇이 청소하는 칸의 개수를 출력한다.
[접근방법]
[C++11 source 구현]
'PSNote > Problem Solving' 카테고리의 다른 글
[BOJ-1613]역사 (0) | 2017.09.10 |
---|---|
[BOJ-11060]점프 점프 (0) | 2017.09.08 |
[BOJ-1890] 점프 (0) | 2017.09.01 |
[BOJ-1018]체스판 다시 칠하기 (0) | 2017.09.01 |
[BOJ-14659]한조서열정리하고옴ㅋㅋ (0) | 2017.07.29 |