알고리즘/백준
1743_음식물피하기
베리영young
2024. 4. 11. 09:12
사용 알고리즘: bfs
사용 언어: java
import java.awt.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main_bj_1743_음식물피하기 {
static int[] dx = {-1,1,0,0};
static int[] dy = {0,0,-1,1};
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
int[][] map = new int[n][m];
for (int i = 0; i < k; i++) {
st = new StringTokenizer(br.readLine());
int r = Integer.parseInt(st.nextToken()) - 1;
int c = Integer.parseInt(st.nextToken()) - 1;
map[r][c] = 1; //음식물이 있으면 1
}
//입력 끝
int maxArea = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
//음식물이 있으면 갯수 세러 가기
if(map[i][j] == 1) {
Point curPoint = new Point(i, j);
maxArea = bfs(curPoint, map, maxArea, n,m);
}
}
}
System.out.println(maxArea);
}
private static int bfs(Point startPoint, int[][] map, int maxArea, int n, int m) {
int curArea = 1;
Queue<Point> q = new ArrayDeque<>();
q.offer(startPoint);
map[startPoint.x][startPoint.y] = -1; //방문 처리
while (!q.isEmpty()) {
Point curPoint = q.poll();
for (int d = 0; d < 4; d++) {
int nx = curPoint.x + dx[d];
int ny = curPoint.y + dy[d];
if(nx>=0 && nx<n && ny>=0 && ny<m && map[nx][ny] == 1) {
q.offer(new Point(nx, ny));
curArea++;
map[nx][ny] = -1;
}
}
}
return Math.max(maxArea, curArea);
}
}
덩어리 찾기 -> bfs