더북(TheBook)

이렇게 하면 방향 인덱스가 상-0, 하-3, 좌-1, 우-2가 됩니다. 반대 방향 인덱스끼리 더하면 3이 됨을 알 수 있습니다. 이를 이용하여 다음과 같이 isDistanced(room, x, y) 메서드의 switch 문을 완성합니다.

switch (room[ny][nx]) {
    case 'P': return false;
    case 'O':
        if (isNextToVolunteer(room, nx, ny, 3-d)) return false;
        break;
}

특정 위치의 응시자가 거리두기를 지키는지 검사할 수 있게 되었으니 대기실 전체가 거리두기를 지키는지 검사하는 isDistanced(room) 메서드도 다음과 같이 완성할 수 있습니다.

private boolean isDistanced(char[][] room) {
    for (int y = 0; y < room.length; y++) {
        for (int x = 0; x < room[y].length; x++) {
            if (room[y][x] != 'P') continue;
            if (!isDistanced(room, x, y)) return false;
        }
    }
    return true;
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.