설명

섬 개수 출력

 

 

 

 

예시

7
1 1 0 0 0 1 0
0 1 1 0 1 1 0
0 1 0 0 0 0 0
0 0 0 1 0 1 1
1 1 0 1 1 0 0
1 0 0 0 1 0 0
1 0 1 0 1 0 0

 

5

 

 

 

 

풀이

섬나라가 몇개 있는지를 찾으면 된다.

 

1. 배열을 문제대로 입력받고

 

2. 입력받은 배열에서 1이 있는곳을 탐색해나간다. 그리고 그 때, answer을 1 증가시키고

DFS(int x, int y) 돌려서 그 해당하는 하나의 섬전체를 0으로 만든다.

 

3. 계속 돌면서 1이 있는곳 = 섬개수를 더해간다....

import java.util.*;


class Main {

	static int[] dx= {0,1,1,1,0,-1,-1,-1};
	static int[] dy = {-1,-1,0,1,1,1,0,-1};
	static int n;
	static int [][] board;
	static int cnt=0;
	
	
	public void DFS(int x, int y) {
		
		board[x][y]=0;
		for(int i=0; i<8; i++) {
			int nx=x+dx[i];
			int ny=y+dy[i];
			
			if(nx>=0 && ny>=0 && nx<n && ny<n && board[nx][ny]==1) {
				board[nx][ny]=0;
				DFS(nx,ny);
			}
		}
		
		
	}
	
	public void solution(int[][] board) {
		
		for(int i=0; i<n ;i++) {
			for(int j=0; j<n; j++) {
				if(board[i][j]==1) {
					cnt++;
					DFS(i,j);
				}
			}
		}
	}
	
	public static void main(String[] args){
		Main T = new Main();
		Scanner sc = new Scanner(System.in);
		
		n= sc.nextInt();
		
		board= new int[n][n];
		
		for(int i=0; i<n ;i++) {
			for(int j=0; j<n; j++) {
				board[i][j]=sc.nextInt();
			}
		}
		
		T.solution(board);
		
		System.out.println(cnt);

	}

	
}

 

'알고리즘기초 > DFS,BFS활용' 카테고리의 다른 글

12. 피자배달거리  (0) 2022.10.03
14. 섬나라 아일랜드(BFS)  (0) 2022.10.02
12. 토마토(BFS 활용)  (0) 2022.10.01
11. 미로의 최단거리 통로(BFS)  (1) 2022.10.01
10. 미로탐색(DFS)  (0) 2022.10.01

+ Recent posts