room[ny][nx]는 세 가지 중 하나의 값을 가지고 있습니다.
• X: 파티션일 경우, 이 위치를 이용하여 다른 응시자에게 도달할 수 없으므로 별도의 처리가 필요하지 않습니다.
• P: 응시자일 경우, 맨해튼 거리 1에 다른 응시자가 있는 것이므로 거리두기가 지켜지지 않은 것입니다.
• O: 빈 테이블일 경우, 인접한 곳에 다른 응시자가 있다면 거리두기가 지켜지지 않은 것입니다.
이는 다음과 같이 switch 문으로 구현할 수 있습니다.
switch (room[ny][nx]) {
case 'P': return false;
case 'O':
// 인접한 곳에 다른 응시자가 있는지 검사
break;
}
1-B. 빈 테이블과 인접한 위치 중 응시자가 있다면 거리두기를 지키지 않은 것
여기에서 인접한 곳이라 함은 다시 상하좌우를 의미합니다. 하지만 원래 검사를 시작했던 응시자는 제외해야 하기 때문에 해당 방향으로는 검사를 시행하지 않아야 합니다.
▲ 그림 3-19 맨해튼 거리 1 위치에서 검사 방향