Java : 섬나라 아일랜드

cad·2022년 1월 8일
0

Algorithm

목록 보기
12/33

문제

풀이

  1. 8 방향 dfs로 풀었다.
  2. 0,0 부터 n,n 까지 돌면서 1(섬)인 곳을 찾으면 카운팅하고 dfs돌면서 방문한 곳은 0으로 바꿔준다.
  3. 끝나면 다시 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);
      }
    }
  }
}
profile
Dare mighty things!

0개의 댓글