[백준] 4963번 : 섬의 개수 - Java(자바)

강재원·2022년 11월 24일
0

[코딩테스트] Java

목록 보기
190/200



https://www.acmicpc.net/problem/4963

import java.util.*;
public class Main {
    static int arr[][];
    static boolean check[][];
    static int dx[]={0,0,1,-1,1,1,-1,-1};
    static int dy[]={1,-1,0,0,1,-1,-1,1};
    static int w;
    static int h;
    
    static void find(int i,int j){
        check[i][j]=true;
        
        for(int k=0;k<8;k++){
            int x=i+dx[k];
            int y=j+dy[k];
            
            if(x>=0 && x<h && y>=0 && y<w){
                if(arr[x][y]==1 && check[x][y]==false){
                    find(x,y);
                }
            }
        }
    }
    
    public static void main(String args[]) {
        Scanner s=new Scanner(System.in);
        while(true){
            w=s.nextInt();
            h=s.nextInt();
            if(w==0 && h==0) break;
            arr=new int[h][w];
            
            for(int i=0;i<h;i++){
                for(int j=0;j<w;j++){
                    arr[i][j]=s.nextInt();
                }
            }
            check=new boolean[h][w];
            int count=0;
            
            for(int i=0;i<h;i++){
                for(int j=0;j<w;j++){
                    if(arr[i][j]==1 && check[i][j]==false){
                        find(i,j);
                        count++;
                    }
                }
            }
            System.out.println(count);
        }
    }
}
profile
개념정리 & 문법 정리 & 알고리즘 공부

0개의 댓글