[백준] 4963번 : 섬의 개수 - C

강재원·2022년 11월 24일
0

[코딩테스트] C/C++

목록 보기
190/200



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

#include<stdio.h>
#include<stdbool.h>

static int arr[51][51];
static bool check[51][51];
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);
            }
        }
    }
}

int main() {
    while(true){
        scanf("%d %d",&w,&h);
        if(w==0 && h==0) break;
        
        for(int i=0;i<h;i++){
            for(int j=0;j<w;j++){
                scanf("%d",&arr[i][j]);
                check[i][j]=false;
            }
        }
        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++;
                }
            }
        }
        printf("%d\n",count);
    }
}
profile
개념정리 & 문법 정리 & 알고리즘 공부

0개의 댓글