우선 입력이 String[][] 형식으로 들어오고, 대기실 하나는 String[] 형식이 됩니다. 우리는 원소 하나하나에 관심이 있고 각 대기실이 거리두기를 지키는지 검사할 것이므로 대기실을 char[][] 형식으로 만들어 주고, 거리두기 결과를 저장할 배열을 선언합니다.
int[] answer = new int[places.length];
for (int i = 0; i < answer.lenght; i++){
String[] place = places[i];
char[][] room = new char[place.length][];
for (int j = 0; j < room.length; j++) {
room[j] = place[j].toCharArray();
}
// 거리두기 검사 후 answer에 기록
}
return answer;
거리두기를 지키고 있는지 검사하는 idDistanced() 메서드를 선언합니다.
private boolean isDistanced(char[][] room) {
// 거리두기 검사
return true;
}
대기실에서 응시자가 앉아 있는 모든 위치에 대해 거리두기 검사를 진행해야 합니다. 다음과 같이 응시자가 앉아 있지 않은 위치들은 continue; 키워드로 검사를 건너뛰도록 합니다. (P는 응시자가 앉아 있는 자리, O는 빈 테이블, X는 파티션)
for (int y = 0; y < room.length; y++) {
for (int x = 0; x < room[y].length; x++) {
if (room[y][x] != 'P') continue;
//거리두기 검사
}
}
다음으로 해당 대기실에서 응시자의 위치 (x, y)가 거리두기를 지키는지 검사하는 메서드를 선언합니다.
private boolean isDistanced(char [][] room, int x, int y) { //overloading
// room[y][x]가 거리두기를 지키는지 검사
return true;
}
상하 좌우 검색을 위해 dx, dy를 선언
private static final int dx[] = {0,0,-1,1};
private static final int dy[] = {-1,1,0,0};
2차원 배열의 length 필드를 이용하여 범위 검사를 할 때는 y 속성을 x속성보다 먼저 검사해야 안전합니다.
for (int d = 0; d < 4; d++){
int nx = x + dx[d];
int ny = y + dy[d];
if (ny < 0 || ny >= room.length || nx < 0 || nx >= room[ny].length) continue;
// room[ny][nx]를 통해 다른 응시자에게 도달할 수 있는지 검사
}