Park DJ
dj0998
Park DJ
전체 방문자
오늘
어제
  • 분류 전체보기 (363)
    • 백준 (363)

공지사항

인기 글

태그

  • Java
  • 백준 12871
  • 백준 16194
  • 백준 10709
  • 백준 4659
  • 백준 12605
  • 백준 1531
  • 백준 24039
  • 백준 7567
  • 백준 15312
  • 자바
  • 백준 2591
  • 백준 3049
  • 백준 2343
  • 백준 15655
  • 백준 3135
  • 백준 7662
  • 백준 1747
  • 백준 6550
  • 백준 15961
  • 백준 14582
  • 백준 1011
  • 백준
  • 백준 8892
  • 백준 2467
  • 백준 2225
  • 백준 16926
  • 백준 1495
  • 백준 1914
  • 백준 1064
hELLO · Designed By 정상우.
Park DJ

dj0998

백준 2067 단지번호붙이기(Java)
백준

백준 2067 단지번호붙이기(Java)

2023. 2. 13. 02:17

https://www.acmicpc.net/problem/2667

 

2667번: 단지번호붙이기

<그림 1>과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여

www.acmicpc.net


 

해석 및 팁

 


 

이 문제는 bfs를 사용하면 되는 문제입니다. 단지수를 세어주고 정렬하여 출력하면 됩니다.

 


 

Java 코드

 


import java.util.Scanner;
import java.util.ArrayList;
import java.util.Collections;

public class Main {

  static int n;
  static int count;
  static int[][] arr;
  static boolean[][] visit;
  static int[] dx = {1, -1, 0, 0};
  static int[] dy = {0, 0, -1, 1};
  
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    StringBuilder sb = new StringBuilder();
    ArrayList<Integer> list = new ArrayList<>(); 

    n = sc.nextInt();
    arr = new int[n][n];
    visit = new boolean[n][n];
   

    for(int i = 0; i < n; i++) {
      String s = sc.next();
      for(int j = 0; j < n; j++) {
        arr[i][j] = s.charAt(j) - '0';
      }
    }

    for(int i = 0; i < n; i++) {
      for(int j = 0; j < n; j++) {
        if(arr[i][j] != 0 && visit[i][j] == false) {
          count = 0;
          dfs(i, j);
          list.add(count);
        }
      }
    }

    Collections.sort(list);

    sb.append(list.size()+"\n");

    for(int i = 0; i < list.size(); i++) sb.append(list.get(i)+"\n");
    
    System.out.println(sb);
  }

  public static void dfs(int a, int b) {
    visit[a][b] = true;
    count++;

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

      if(x >= 0 && x < n && y >= 0 && y < n) {
        if(arr[x][y] != 0 && visit[x][y] == false) dfs(x, y);
      }
    }
  }
  
}

'백준' 카테고리의 다른 글

백준 1931 회의실배정(Java)  (0) 2023.02.14
백준 1149 RGB거리(Java)  (0) 2023.02.13
백준 1500 최대 곱(Java)  (0) 2023.02.12
백준 1254 팰린드롬 만들기(Java)  (0) 2023.02.12
백준 6588 골드바흐의 추측(Java)  (0) 2023.02.12
    '백준' 카테고리의 다른 글
    • 백준 1931 회의실배정(Java)
    • 백준 1149 RGB거리(Java)
    • 백준 1500 최대 곱(Java)
    • 백준 1254 팰린드롬 만들기(Java)
    Park DJ
    Park DJ

    티스토리툴바