🖇️ 문제 링크
📝 문제 분석
BFS 탐색을 진행합니다. 거리가 3 이상이라면 더 이상 탐색하지 않아도 됩니다.
파티션으로 막혀 있을 경우 더 진행할 수 없으며, 자신이 아닌 응시자를 발견하면 FALSE를 리턴합니다.
⌨️ 코드
import java.util.*;
class Solution {
int[] dy = {-1, 0, 1, 0}, dx= {0, 1, 0, -1};
public int[] solution(String[][] places) {
int[] ans = new int[5];
Arrays.fill(ans, 1);
loop:
for(int room = 0; room < 5; room++) {
char[][] people = new char[5][5];
for(int table = 0; table < 5; table++)
people[table] = places[room][table].toCharArray();
for(int i = 0; i < 5; i++) {
for(int j = 0; j < 5; j++) {
if(people[i][j] == 'P') {
Queue<int[]> q = new LinkedList<>();
boolean[][] visit = new boolean[5][5];
q.add(new int[]{i, j});
visit[i][j] = true;
int distance = 0;
while(!q.isEmpty() && distance < 3) {
int s = q.size();
for(int c = 0; c < s; c++) {
int[] cur = q.poll();
if(!(cur[0] == i && cur[1] == j) && people[cur[0]][cur[1]] == 'P') {
ans[room] = 0;
continue loop;
}
for(int d = 0; d < 4; d++) {
int ny = cur[0] + dy[d];
int nx = cur[1] + dx[d];
if(ny < 0 || nx < 0 || ny >= 5 || nx >= 5 || visit[ny][nx] || people[ny][nx] == 'X')
continue;
visit[ny][nx] = true;
q.add(new int[]{ny, nx});
}
}
distance++;
}
}
}
}
}
return ans;
}
}
Uploaded by Notion2Tistory v1.1.0