반응형
풀이
- 해당 문제는 간단히 BFS로 해결했으며
- 따로 특별하거나 그런 문제는 아니였음
- 다만 벽이 아닌 사람이 있는 경우에도 해당 위치에 방문할 수 있는지
- 한 번 읽었을 때는 이해가 가지 않아
- 두 번 읽으니 벽이 아니면 갈 수 있다는 것을 확인하여 간단히 해결.
import java.io.*;
import java.util.*;
public class _21736 {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static String[][] mtx;
static boolean[][] visit;
static Deque<int[]> dq = new ArrayDeque<>();
public static void main(String[] args) throws IOException {
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
mtx = new String[N][M];
visit = new boolean[N][M];
addMtx(N,M);
int result = findPeople(N,M);
System.out.println(result==0?"TT":result);
}
private static void addMtx(int N, int M) throws IOException {
for (int i=0; i<N; i++) {
String inp = br.readLine();
for (int j=0; j<M; j++) {
mtx[i][j]=String.valueOf(inp.charAt(j));
if (mtx[i][j].equals("I")) dq.add(new int[]{i,j});
}
}
}
private static int findPeople(int N, int M) {
int cnt = 0;
int[] ni = {-1,0,1,0};
int[] nj = {0,1,0,-1};
while (!dq.isEmpty()) {
int[] now = dq.pollFirst();
for (int i=0; i<4; i++) {
if ((0<=now[0]+ni[i]&&now[0]+ni[i]<N) && (0<=now[1]+nj[i]&&now[1]+nj[i]<M) &&
!mtx[now[0]+ni[i]][now[1]+nj[i]].equals("X") && !visit[now[0]+ni[i]][now[1]+nj[i]]) {
dq.add(new int[]{now[0]+ni[i],now[1]+nj[i]});
visit[now[0]+ni[i]][now[1]+nj[i]]=true;
if (mtx[now[0]+ni[i]][now[1]+nj[i]].equals("P")) cnt++;
}
}
}
return cnt;
}
}
'알고리즘' 카테고리의 다른 글
[백준, 자바, 1389번] 케빈 베이컨의 6단계 법칙 (1) | 2024.12.09 |
---|---|
[백준, 자바, 30804번] 과일 탕후루 (0) | 2024.12.06 |
[백준, 자바, 17626번] Four Squares (0) | 2024.12.05 |
[백준, 자바, 9375번] 패션왕 신해빈 (0) | 2024.12.05 |
[백준, 자바, 1094번] 막대기 (0) | 2024.11.27 |