백준공부/java

[백준] 4963번 섬의 개수 문제! (silver 2

gomduri43 2023. 6. 4. 20:29

import java.io.*;
import java.util.*;

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));
        StringTokenizer st;

        while(true){
            st=new StringTokenizer(br.readLine());
            int w=Integer.parseInt(st.nextToken());
            int h=Integer.parseInt(st.nextToken());
            if(w==0 && h==0){
                break;
            }
            boolean[][] visit=new boolean[h+1][w+1];
            for(int i=1; i<=h; i++){
                st=new StringTokenizer(br.readLine());
                for(int j=1; j<=w; j++) {
                    if (st.nextToken().equals("1")) {
                        visit [i][j]=true;
                    }
                }
            }
            int answer=0;
            for(int i=1; i<=h; i++){
                for(int j=1; j<=w; j++){
                    if(visit[i][j]){
                        dfs(visit,w,h,j,i);
                        answer++;
                    }
                }
            }
            System.out.println(answer);
        }
    }
    public static void dfs(boolean[][] visit, int w, int h, int x,int y){
        if(!visit[y][x]){
            return;
        }
        visit[y][x]=false;
        if(1<x){
            dfs(visit, w,h,x-1,y);
            if(y>1){
                dfs(visit, w,h,x-1,y-1);
            }
            if(y<h){
                dfs(visit, w,h,x-1,y+1);
            }
        }
        if(x<w){
            dfs(visit,w,h,x+1,y);
            if(y>1){
                dfs(visit, w,h,x+1,y-1);
            }
            if(y<h){
                dfs(visit, w,h,x+1,y+1);
            }
        }
        if(1<y){
            dfs(visit,w,h,x,y-1);
        }
        if(y<h){
            dfs(visit,w,h,x,y+1);
        }
        return;
    }
}