본문 바로가기

■ 알고리즘 문제 풀이/BOJ

[BOJ] 백준 14503. 로봇 청소기

▶문제설명

[BOJ] 백준 14503. 로봇 청소기

https://www.acmicpc.net/problem/14503



▶Hint


시뮬레이션 문제이다.


네 방향을 회전하며 청소할 공간을 탐색하는 과정에서

청소한 공간을 찾았는지 찾지 못했는지 판단하는 플래그 역할의 변수를 활용하면

청소할 공간을 찾아서 청소를 한 경우그러지 못 한 경우를 분기점으로 하여 프로그램의 흐름을 바꿀 수 있다.


※ 청소할 공간이 없음 = 이미 청소를 했거나 벽임


로봇 청소기는 현재 위치에서 자신의 왼쪽 방향만 체크할 수 있다.

자신의 현재 방향에서 왼쪽만 보는 방법으로 네 방향을 모두 체크하면서 

아래의 케이스를 확인하여 수행한다. (flag_go : OFF 상태로 시작)


case 1. 아직 청소를 안 한 공간이 있음

: 왼쪽으로 회전한 뒤 앞으로 한 칸 이동시킨다 (flag_go : ON으로 변경)

case 2. 청소할 공간이 없음

: 왼쪽으로 회전한다.


청소할 곳을 찾은 경우 flag_go는 ON상태일 것이고

그렇지 못한 경우는 flag_go는 OFF 상태가 된다.


flag_go가 ON인 경우 청소를 수행한 뒤 다시 네 방향을 탐색하도록 구현하고,

flag_go가 OFF인 경우 아래의 케이스를 확인하여 수행하도록 구현한다.


case 3. 뒤로 한 칸 후진할 공간이 있음

: 방향은 고정하고 한 칸 후진하여 다시 네 방향 탐색을 반복한다.

case 4. 뒤가 벽으로 막혀있어 후진이 불가능함

: 청소를 종료한다.


맵의 범위를 벗어나는 경우는 벽으로 처리해야함에 유의하자.



▶Solution



마지막 수정 일시 : 2019.04.09. 12:03