3. 맨해튼 거리 2 이하 & 파티션의 유무를 고려하여 거리두기를 잘했는지 검사합니다.
이제 장소가 준비되었으니, 거리두기를 잘 시행했는지 모두 검사해야 합니다. 여기서 한 가지 짚고 넘어갈 점은 만약 현재 자신의 위치에서 맨해튼 거리를 측정하여 경우의 수를 검증할 때 문제가 발생한다는 것입니다. 반복문 내부에서는 자신의 위치에서 다른 응시자(P)가 어디에 있는지 알 방법이 없기 때문이죠. 주어진 지도에서 미리 응시자의 좌표를 계산한 뒤 거리 공식을 사용할 수는 있으나 이럴 경우 모든 좌표에서 거리를 계산해야 하고 추가적으로 파티션의 존재까지 확인해야 하니 일을 줄이려고 하다가 오히려 일을 키우게 됩니다(BFS 탐색 방식).
이럴 때는 거리로 계산하는 것이 아니라 현재 자신의 위치에서 다른 응시자가 있으면 안 되는 경우만 전부 확인하고, 아니면 넘어가는 방식으로 대응하는 게 훨씬 유리합니다. 장소의 크기가 5×5이고, 앞서 확인했던 6가지 경우의 수만 검사하면 되므로 전체를 확인하는 것보다 빠르게 작업을 끝낼 수 있습니다.
단, 6가지를 어떤 기준으로 확인할지는 여러분의 몫입니다. 책에서는 가로 방향/세로 방향으로 묶어서 확인하는 방법을 쓸 것입니다. 이 방법은 중복 코드가 발생하므로 코드의 효율성 자체는 좋지 않습니다. 최대한 이해하기 쉽게 작성했지만, 여러분의 마음에 들지 않는다면 원하는 다른 방법을 적용해도 됩니다.