[문제]
https://www.acmicpc.net/problem/14503
[풀이]
1) 로봇 청소기는 다음과 같이 작동한다.
-
현재 위치를 청소한다.
-
현재 위치에서 현재 방향을 기준으로 왼쪽방향부터 차례대로 탐색을 진행한다.
-
왼쪽 방향에 아직 청소하지 않은 공간이 존재한다면, 그 방향으로 회전한 다음 한 칸을 전진하고 1번부터 진행한다.
-
왼쪽 방향에 청소할 공간이 없다면, 그 방향으로 회전하고 2번으로 돌아간다.
-
네 방향 모두 청소가 이미 되어있거나 벽인 경우에는, 바라보는 방향을 유지한 채로 한 칸 후진을 하고 2번으로 돌아간다.
-
네 방향 모두 청소가 이미 되어있거나 벽이면서, 뒤쪽 방향이 벽이라 후진도 할 수 없는 경우에는 작동을 멈춘다.
-
2) 조건에 맞춰서 bfs를 작성하고 완탐을 한다. 단, 로봇청소기는 한 방향을 기준으로 왼쪽으로 움직이기 때문에 큐에 넣을 조건이 된다면 (왼쪽 방향에 청소할 공간이 있다면) 더 이상 다른 방향을 탐색하지 않고 바로 그 방향으로 가도록 break를 걸어줘야 한다.
3) flag 변수를 두어 상 하 좌 우 모두 청소할 공간이 없다면 (false) 후진을 할 수 있도록 한다.
'BOJ > C++' 카테고리의 다른 글
[BOJ] 구슬탈출2 (0) | 2019.08.07 |
---|---|
[BOJ] 연구소 (0) | 2019.08.06 |
[BOJ] 치킨배달 (0) | 2019.08.06 |
[BOJ] 드래곤커브 (0) | 2019.08.06 |
[BOJ] 나무재테크 (0) | 2019.08.06 |