[백준] 2667번 - 단지 번호 붙이기 (DFS)

2025. 2. 20. 19:02·PS

모든 단지를 방문해야 함! -> DFS를 사용한다.

 

   	static boolean isVisited[][];
    static int arr[][];
    static int count = 0, number = 0;
    static int nowX, nowY, N;
    static int dirX[] = {0, 0, -1, 1};
    static int dirY[] = {-1, 1, 0, 0};

 

dirX, dirY는 각각 좌우, 상하의 좌표 범위를 판단 할 수 있게 하기 위한 배열이다.

nowX, nowY는 현재의 범위를 계산한 좌표이다.

 

 

public static void DFS(int x, int y) {
        isVisited[x][y] = true;
        arr[x][y] = number;
        count++;

        for (int i = 0; i < 4; i++) {
            nowX = dirX[i] + x;
            nowY = dirY[i] + y;

            if (nowX >= 0 && nowY >= 0 && nowX < N && nowY < N) {
                if (arr[nowX][nowY] == 1 && !isVisited[nowX][nowY]) {
                    DFS(nowX, nowY);
                }
            }
        }

 

 public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        N = Integer.parseInt(br.readLine());

        arr = new int[N][N];
        isVisited = new boolean[N][N];
        List<Integer> list = new ArrayList<>();

        for (int i = 0; i < N; i++) {
            String[] str = br.readLine().split("");
            for (int j = 0; j < N; j++) {
                arr[i][j] = Integer.parseInt(str[j]);
            }
        }

        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
                if (arr[i][j] == 1 && !isVisited[i][j]) {
                    count = 0;
                    DFS(i, j);
                    list.add(count);
                }
            }
        }

        System.out.println(list.size());
        Collections.sort(list);


        for (int num : list) {
            System.out.println(num);
        }

    }

 

전체 배열을 탐색하면서 방문하지 않았고, arr 에서 1인 곳을 만날 경우 DFS() 메서드가 실행되도록 한다 

DFS()에서 방문 할 경우 isVisited[x][y] = true

단지 번호를 부여하기 위해 number 값을 arr[x][y]에 넣어준다.

 

'PS' 카테고리의 다른 글

[백준] 2178번 - 미로 탐색(BFS)  (0) 2025.02.23
[백준] 1931번 - 회의실 배정  (0) 2025.02.16
[백준] 1542번 - 잃어버린 괄호  (0) 2025.02.15
[백준] 11047번 동전 0  (0) 2025.01.30
[백준] 2504번 - 괄호의 값  (1) 2025.01.21
'PS' 카테고리의 다른 글
  • [백준] 2178번 - 미로 탐색(BFS)
  • [백준] 1931번 - 회의실 배정
  • [백준] 1542번 - 잃어버린 괄호
  • [백준] 11047번 동전 0
zioni
zioni
  • zioni
    jiwon's dev.log
    zioni
  • 전체
    오늘
    어제
    • 분류 전체보기 (76)
      • spring & java (13)
      • Algorithm (14)
      • PS (37)
      • project (3)
      • experience (1)
      • etc (6)
      • study (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

    자바
    java
    백준2525
    백준
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
zioni
[백준] 2667번 - 단지 번호 붙이기 (DFS)
상단으로

티스토리툴바