<Algorithm> 72. 4963번 섬의 개수(DFS)
by BFine반응형
1. 4963번 섬의 개수
기본 DFS 문제, 처음으로 테스트 케이스 확인 없이 한번에 맞춘 문제, DFS로 영역 구하는 문제는 어느정도 이해가 된 것 같다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.StringTokenizer; public class Main { static boolean[][] visited; static int count; public static void main(String[] args) throws IOException { ArrayList<Integer> ans = new ArrayList<>(); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); for(;;) { StringTokenizer st = new StringTokenizer(br.readLine()); int M = Integer.parseInt(st.nextToken()); int N = Integer.parseInt(st.nextToken()); int arr[][] = new int[N][M]; visited = new boolean[N][M]; count = 0; if(N==0&&M==0) break; for(int i = 0; i < N; i++) { st = new StringTokenizer(br.readLine()); for(int j = 0; j < M; j++) { arr[i][j] = Integer.parseInt(st.nextToken()); } } for(int i = 0; i < N; i++) { for(int j = 0; j < M; j++) { if(!visited[i][j] && arr[i][j] == 1) { dfs(i, j, N, M, arr); count++; } } } ans.add(count); } for(Integer in : ans) System.out.println(in); } private static void dfs(int x, int y, int n, int m, int[][] arr) { int[] dx = {0,0,1,-1,1,-1,1,-1}; int[] dy = {1,-1,0,0,-1,1,1,-1}; visited[x][y] = true; 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 < m && !visited[nx][ny] && arr[nx][ny] == 1) { dfs(nx, ny, n, m, arr); } } } } |
참고 & 출처
반응형
'공부(2018~2019) - 스킨변경전 > Algorithm' 카테고리의 다른 글
<Algorithm> 74. 5567번 결혼식 (0) | 2018.09.03 |
---|---|
<Algorithm> 73. 1068번 트리 (0) | 2018.09.03 |
<Algorithm> 70. 2819번 격자판의 숫자 이어붙이기(SW Expert) (0) | 2018.08.29 |
<Algorithm> 69. 2163번 초콜릿 자르기 (0) | 2018.08.29 |
<Algorithm> 68. 9251번 LCS (DP) (0) | 2018.08.28 |
블로그의 정보
57개월 BackEnd
BFine