문제
풀이
- 8 방향 dfs로 풀었다.
- 0,0 부터 n,n 까지 돌면서 1(섬)인 곳을 찾으면 카운팅하고 dfs돌면서 방문한 곳은 0으로 바꿔준다.
- 끝나면 다시 1인 곳을 찾으며 n,n 까지 돌린다.
전체 코드
package inflearn;
import java.util.Scanner;
public class I0813 {
static int[] dx = {-1, -1, 0, 1, 1, 1, 0, -1};
static int[] dy = {0, 1, 1, 1, 0, -1, -1, -1};
static int[][] board;
static int ans = 0, n;
public static void main(String[] args) {
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();
}
}
for (int x = 0; x < n; x++) {
for (int y = 0; y < n; y++) {
if (board[x][y] == 1) {
dfs(x, y);
ans++;
}
}
}
System.out.println(ans);
}
static void dfs(int x, int y) {
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);
}
}
}
}