import java.util.*;
class Solution {
public int[] solution(String[][] places) {
int n = places.length;
int[] answer = new int[n];
for (int i = 0; i < n; i++) {
answer[i] = check(places[i]) ? 1 : 0;
}
return answer;
}
// 모든 사람이 거리두기를 잘 하고 있는지 체크하는 함수
// 모두 다 잘 지키고 있으면 return true
// 한 명이라도 잘 안 지키면 return false
boolean check(String[] place) {
for (int r = 0; r < 5; r++) {
for (int c = 0; c < 5; c++) {
if (place[r].charAt(c) == 'P') { // 하나씩 접근하기 위한 용도
if (!bfs(r, c, place)) return false; // 거리 2 이하에 사람(P)가 있으면 false 반환
}
}
}
return true;
}
boolean bfs(int startRow, int startCol, String[] place) {
int[] dr = {0, 1, 0, -1};
int[] dc = {-1, 0, 1, 0};
boolean[][] visited = new boolean[5][5];
Queue<int[]> queue = new ArrayDeque<>();
queue.offer(new int[]{startRow, startCol, 0});
visited[startRow][startCol] = true;
while (!queue.isEmpty()) {
int[] cur = queue.poll();
int r = cur[0];
int c = cur[1];
int dist = cur[2];
if (dist > 2) continue; // 거리가 2를 초과하면 계속 진행
if (dist != 0 && place[r].charAt(c) == 'P') { // 현재 거리가 1 이하일 때 P가 있으면 false
return false;
}
for (int i = 0; i < 4; i++) {
int nr = r + dr[i];
int nc = c + dc[i];
if (nr >= 0 && nr < 5 && nc >= 0 && nc < 5 && !visited[nr][nc] && place[nr].charAt(nc) != 'X') {
visited[nr][nc] = true;
queue.offer(new int[]{nr, nc, dist + 1});
}
}
}
return true;
}
}
실행 결과
/Solution.java:8: error: not a statement
if(check(places[i])) answer[i];
^
/Solution.java:31: error: '(' or '[' expected
Queue<int[]> queue = new ArrayDeque;
^
2 errors
테스트 결과 (~˘▾˘)~
1개 중 0개 성공
import java.util.*;
class Solution {
public int[] solution(String[][] places) {
int n = places.length;
int[] answer = {};
for(int i = 0; i < n; i++)
if(check(places[i])) answer[i];
else answer[i]=0;
return answer;
}
// 모든 사람이 거리두기를 잘 하고 있는지 체크하는 함수
// 모두 다 잘 지키고 있으면 return true
// 한 명이라도 잘 안 지키면 return false
boolean check(String[] place) {
for(int r = 0; r <5; r++) {
for(int c = 0; c< 5; c++){
if(place[r].charAt(c) == 'P') // 하나씩 접근하기 위한 용도
System.out.println(r,c);
if(!bfs(r,c, place)) return false; // 거리 2 이하에 사람(P)가 없으면 true 반환하고, 있으면 false를 반환하는 함수
}
}
return true;
}
boolean bfs(int starRow, int startCol, String[] place){
int[] dr = {0,1,0,-1};
int[] dc = {-1,0,1,0};
boolean[][] visited = new boolean[5][5];
Queue<int[]> queue = new ArrayDeque;
Queue.offer(new int[]{starRow,starCol,1});
visit[0][0] = true;
while(!queue.isEmpty()){
// 방문
int[] cur = queue.poll();
int r = cur[0];
int dist = cur[2];
if(place[r].charAt(c) == 'P') { // P가 없다면 return false
return false;
}
// 예약 (거리가 2 이상이면 예약 안함)
if (dist >= 2) continue;
for(int i =0; i<4; i++) {
int nr = r + dr[i];
int nc = c + dc[i];
if(nr>=0 && nr<n && nc>= 0 && nc< m && place[nr].charAt(nc) != 'X')
if(!visited[nr][nc]){
queue.offer(new int[]{nr, nc, dist+1});
visited[nr][nc] = true;
}
}
}
return true;
}
}