본문 바로가기
코딩테스트

[백준2667] 단지번호붙이기 [ java]

by 근즈리얼 2021. 3. 22.
728x90


dfs로 문제를 풀어보았다.

방문했는지를 확인하기 위한 visit이차원 배열을 만들었다.

 

코드

package baekjoon;

import java.util.Arrays;
import java.util.Scanner;

public class apart_num {
    public static int dx[] = {0,0,1,-1};
    public static int dy[] = {1,-1,0,0};
    public static int[] aparts = new int[25*25];
    public static int n;
    public static int apartNum = 0;
    public static boolean[][] visit = new boolean[25][25];
    public static int[][] map = new int[25][25];

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        n = scan.nextInt();
        
        map = new int[n][n];
        visit = new boolean[n][n];
        
        for(int i = 0; i<n;i++){
            String input = scan.next();
            for(int j = 0; j<n;j++){
                map[i][j] = input.charAt(j)-'0';
            }
        }
        for(int i = 0;i<n;i++){
            for(int j = 0;j<n;j++){
                if(map[i][j] == 1 && !visit[i][j]){
                    apartNum++;
                    dfs(i,j);
                }
            }
        }
        Arrays.sort(aparts);
        System.out.println(apartNum);
        for(int i = 0; i<aparts.length;i++){
            if(aparts[i] == 0){
            }else{
                System.out.println(aparts[i]);
            }
        }
    }

    private static void dfs(int x, int y) {
        visit[x][y] = true;
        aparts[apartNum]++;

        for(int i = 0; i<4;i++){
            int nx = x + dx[i];
            int ny = y + dy[i];

            if(nx >= 0 && ny >= 0 && nx < n && ny <n){
                if(map[nx][ny] == 1 && !visit[nx][ny]){
                    dfs(nx,ny);
                }
            }
        }
    }
}
728x90

'코딩테스트' 카테고리의 다른 글

[백준2178] 미로 탐색 [java]  (1) 2021.03.23
[백준1012] 유기농 배추[java]  (0) 2021.03.23
[백준2606] 바이러스 [java]  (0) 2021.03.22
[백준1260번] DFS와 BFS  (0) 2021.03.18
[백준10989] 수 정렬하기 - 3 [java]  (0) 2021.03.10

댓글