백준공부/java
[백준] 1926번 그림 문제 (silver 1
gomduri43
2023. 6. 8. 13:39
import java.io.*;
import java.util.*;
class point{
int x;
int y;
public point(int x ,int y){
this.x=x;
this.y=y;
}
}
public class Main{
public static void main(String[]args)throws IOException{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
Queue<point> que=new LinkedList<>();
StringTokenizer st=new StringTokenizer(br.readLine());
int n=Integer.parseInt(st.nextToken());
int m=Integer.parseInt(st.nextToken());
boolean[][] paper= new boolean[n+1][m+1];
for(int i=1; i<=n; i++){
st=new StringTokenizer(br.readLine());
for(int j=1; j<=m; j++){
if(Integer.parseInt(st.nextToken())==1) {
paper[i][j] = true;
}
}
}
int max=0;
int numOfArt=0;
int extent=0;
for(int i=1; i<=n; i++){
for(int j=1; j<=m; j++){
if(paper[i][j]==true){
numOfArt++;
extent=0;
que.offer(new point(j,i));
paper[i][j]=false;
while(que.size()!=0){
point a=que.poll();
if(1<a.x && paper[a.y][a.x-1]==true){
paper[a.y][a.x-1]=false;
que.offer(new point(a.x-1,a.y));
}
if(a.x<m && paper[a.y][a.x+1]==true ){
paper[a.y][a.x+1]=false;
que.offer(new point(a.x+1,a.y));
}
if(1<a.y && paper[a.y-1][a.x]==true){
paper[a.y-1][a.x]=false;
que.offer(new point(a.x,a.y-1));
}
if(a.y<n && paper[a.y+1][a.x]==true){
paper[a.y+1][a.x]=false;
que.offer(new point(a.x,a.y+1));
}
extent++;
max= max>extent ? max :extent;
}
}
}
}
bw.write(numOfArt+"\n");
bw.write(max+"");
bw.flush();
}
}