코딩테스트/백준

백준 4963 : 섬의 개수 _자바 Java

플래시🦥 2023. 1. 26.
반응형

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

 

4963번: 섬의 개수

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 지도의 너비 w와 높이 h가 주어진다. w와 h는 50보다 작거나 같은 양의 정수이다. 둘째 줄부터 h개 줄에는 지도

www.acmicpc.net

 


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

public class Main {
	
	static int[] dx = {-1, 1, 0, 0,-1, 1, -1, 1};
	static int[] dy = { 0, 0,-1, 1, 1, 1, -1,-1};
	static int w,h,cnt;
	static int[][]map;
	
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
	
		while(true) {
			w = sc.nextInt();	//지도 너비 
			h = sc.nextInt();	//지도 높이
			
			if(w==0&&h==0)
				break;
			
			map = new int[h][w];	//지도
			for(int i=0;i<h;i++) {
				for(int j=0;j<w;j++) {
					map[i][j]=sc.nextInt();
				}
			}
			
			findIsland();
			
		}

	}// main()
	
	static void findIsland() {
		boolean[][] check = new boolean[h][w];
		cnt=0;
		
		for(int i=0;i<h;i++) {
			for(int j=0;j<w;j++) {
				if(map[i][j]==1&&!check[i][j]) {	//섬이고 방문한적 없을 때 
					dfs(i,j,check);
					cnt++;
				}
					
			}
		}
		
		System.out.println(cnt);
	}//findIsland()
	
	static void dfs(int x,int y,boolean[][] check) {
		
		check[x][y]=true;
		
		for(int i=0;i<8;i++) {
			int tX=x+dx[i];
			int tY=y+dy[i];
			
			if(tX>=0 && tY>=0 &&tX<h&&tY<w) {	//지도의 범위 내에서 
				if(!check[tX][tY]&&map[tX][tY]==1) {	//방문한적이 없고, 섬일때 
					dfs(tX,tY,check);
				}
			}
				
		}
	}//dfs() 
	
}// class Main
728x90
반응형

댓글