백준공부/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();

    }



}