jh05013   2년 전

수정 요청이 많이 올라오고 있고, 저도 예전부터 큰 위화감을 갖고 있던 문제입니다. 지금까지 올라온 내용에 몇 개 덧붙이자면, 

  • "북쪽으로부터 떨어진 칸의 개수"라는 말이 모호합니다. 북쪽 무엇으로부터 떨어진 칸의 개수인가요?
  • 2번의 abcd 조건을 d->c->(a, b) 순서로 검사해야 한다는 점이 매우 이상합니다. a->b->c->d 순서로 검사하면 a와 b의 조건 중 하나는 참이기 때문에 청소기가 작동을 멈추지 않아야 정상입니다.
  • "이미 청소되어있는 칸을 또 청소하지 않으며, 벽을 통과할 수 없다."는 작동 방식에서 이미 보장되기 때문에 불필요한 문장입니다.

===

로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오.

로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어져 있다. 각각의 칸은 벽 또는 빈 칸이다. 청소기는 바라보는 방향이 있으며, 이 방향은 동, 서, 남, 북중 하나이다. 지도의 북쪽에서부터 r번째, 서쪽에서부터 c번째로 위치한 칸은 (r, c)로 나타낼 수 있다.

로봇 청소기는 다음과 같이 작동한다.

  1. 현재 위치를 청소한다.
  2. 현재 위치에서 다음을 반복하면서 인접한 칸을 탐색한다.
    1. 현재 위치의 바로 왼쪽에 아직 청소하지 않은 빈 공간이 존재한다면, 왼쪽 방향으로 회전한 다음 한 칸을 전진하고 1번으로 돌아간다. 그렇지 않을 경우, 왼쪽 방향으로 회전한다. 이때, 왼쪽은 현재 바라보는 방향을 기준으로 한다.
    2. 1번으로 돌아가거나 후진하지 않고 2a번 단계가 연속으로 네 번 실행되었을 경우, 바로 뒤쪽이 벽이라면 작동을 멈춘다. 그렇지 않다면 한 칸 후진한다.

startlink   2년 전

수정했습니다.

kmj5052   2년 전

네 번 실행되었을 경우 작동을 멈춘다. 이부분 지문이 잘못되었습니다.

후진에 대한 설명이 없어 이 지문으로는 문제를 풀 수 없습니다.

jh05013   2년 전

죄송합니다. 다시 수정하였습니다. 추가로 "왼쪽"의 정의를 명확히 하였습니다.

@startlink 이렇게 다시 수정해 주시면 감사하겠습니다.

startlink   2년 전

수정했습니다.

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