kmk324   6년 전

현재 위치에서 현재 방향을 기준으로 왼쪽방향부터 차례대로 탐색을 진행한다.

  1. 왼쪽 방향에 아직 청소하지 않은 공간이 존재한다면, 그 방향으로 회전한 다음 한 칸을 전진하고 1번부터 진행한다.
  2. 왼쪽 방향에 청소할 공간이 없다면, 그 방향으로 회전하고 2번으로 돌아간다.
  3. 네 방향 모두 청소가 이미 되어있거나 벽인 경우에는, 바라보는 방향을 유지한 채로 한 칸 후진을 하고 2번으로 돌아간다.
  4. 네 방향 모두 청소가 이미 되어있거나 벽이면서, 뒤쪽 방향이 벽이라 후진도 할 수 없는 경우에는 작동을 멈춘다.

첫번째 . 질문에서도 많은분이언급하셨듯이 문제의 조건에 탐색은 1X1크기로 진행되는 말이 필요해 보입니다. 마치 바라보는 방향을 다 보는 것처럼 해석 됩니다.

두번째. 앞선 1,2에서 바라보는 방향의 왼쪽에 조건을 만족시켜야 방향을 회전하는 것처럼 보입니다.  3의 경우도 ->방향을  바라 보다가 왼쪽  방향인 북쪽 방향이 청소가 되어 있거나 벽인 경우 ->를 유지한 채 <- 방향으로 후진해야 하는 것처럼 보입니다. 사실은 남쪽 방향으로 후진해야하죠.

이거 때문에 6시간 날렸네요..

djm03178   6년 전

첫번째에는 동의하나, 두번째 말씀하신 것은 잘못된 것 같습니다. 1,2에서 조건을 만족시켜야 회전을 하는 것이 맞고, 어차피 3이나 4를 만족하지 않는다면 회전은 무조건 하게 됩니다. 3번의 경우 네 방향 모두 청소가 되어 있는데 ->를 바라보고 있다면 <- 방향으로 후진하는 것이 맞습니다.

좀 더 문제를 간략하게 설명한다면, 현재 위치를 청소한 후, 왼쪽으로 돌면서 한 곳이라도 청소하지 않은 곳이 있다면 그 방향으로 진행하고, 한 바퀴를 다 돈 후에도 더 청소할 곳을 못 찾았다면 그 상태에서 뒤로 후진하면 됩니다.

이렇게 풀지 않으셨는데 정답이 나왔다는 건가요...?

kmk324   6년 전

댓글 감사합니다. 제 말은 처음에 위치가X, 방향이 0번으로 주어진 경우.   

121

2X2

121

북쪽을 바라보고 시작하게되죠.

첫 번째 과정에서 북쪽을 바라보고 서쪽을 탐색한 후  2번이기에 회전을 합니다.   

두 번째 과정에서 서쪽을 바라보고 시작합니다.  그리고 남쪽을 탐색하고  2번이기에 회전을 합니다. 

세 번째 과정에서 남쪽을 바라보고 시작합니다. 그리고 동쪽을 탐색하고 2번이기에 회전을 합니다.

네 번째 과정에서 동쪽을 바라보고 시작합니다. 그리고 북쪽을 탐색하고 3번 조건이며, 바라보는 동쪽 기준 후진인 서쪽으로 이동하는 것처럼 보인다는 것 입니다.

앞선 1,2 조건이 마치 탐색을 하는 동시에 바라보는 방향을 회전하는 것이 아닌 것처럼 보이게 합니다.

실은 남쪽방향으로 후진해야 정답이 되더군요..

네 방향 모두 청소가 이미 되어있거나 벽인 경우에는, 마지막 탐색 방향을 바라보는 방향으로 유지한 채로 한 칸 후진을 하고 2번으로 돌아간다.

이런 식으로 수정하면 어떨까요?

djm03178   6년 전

그렇게 보니 약간 설명이 애매하긴 하군요. 사실 저 부분을 그렇게 한 동작 단위로 끊어서 생각하면 안 되고, 3번이나 4번은 1번이나 2번을 수행하기 이전에 "처음" 상태 (3/4바퀴를 회전한 후가 아니라)에서 이미 4방향이 모두 청소되어있다면 그 사실을 미리 알고 회전을 전혀 하지 않고 그냥 뒤로 가면 되는 건데, 꼭 한 방향씩 돌아봐야 그 자리가 청소되어있는지를 알 수 있다는 식으로 생각해서 복잡하게 된 것 같습니다.

curian203   5년 전

저도 작성자분 처럼 해석해서 엄청 고생했네요.. 어디가 벽일 때 후진하는지를 더 명확하게 서술해야 될 거 같습니다 ㅜㅜ

댓글을 작성하려면 로그인해야 합니다.