sggnology
하늘속에서IT
sggnology
전체 방문자
오늘
어제
  • 분류 전체보기 (83)
    • Algorithm (31)
      • Programmers (27)
      • Baekjoon (4)
    • WIKI (4)
      • VirtualBox (1)
      • Power Toys (1)
    • NodeJS (4)
      • nvm (1)
      • React (1)
      • Vue (1)
    • Dev Language (3)
      • Java (2)
      • Kotlin (1)
    • Spring Boot (17)
      • Gradle (1)
      • JPA (3)
    • DB (4)
      • MariaDB (3)
      • Redis (0)
    • Android (6)
      • Debug (3)
    • Nginx (3)
      • Debug (1)
    • Intellij (0)
    • Network (1)
    • Git (2)
      • GitHub (2)
    • Chrome Extension (0)
    • ETC (5)
      • Monitoring (2)
    • Linux (1)
      • WSL (1)
    • Visual Studio (1)
    • Side Project (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • mariadb
  • 오블완
  • 티스토리챌린지
  • java
  • kotlin
  • JPA
  • 백준
  • docker
  • 연습문제
  • 레벨3
  • spring boot
  • nginx
  • 고득점KIT
  • 프로그래머스
  • 알고리즘
  • 고득점 Kit
  • 레벨2
  • 안드로이드 스튜디오
  • Android Studio
  • DB

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
sggnology

하늘속에서IT

Algorithm/Baekjoon

[Baekjoon] 2667번 단지번호붙이기(feat. Java)

2024. 11. 15. 17:59
728x90

접근

  • 단지에 대한 접근은 DFS 로 처리
  • 단지구분은 숫자로 하여 DFS 가 접근한 단지에 대해 숫자로 기록
  • DFS 가 끝나면 단지 탐색이 끝나게 된 것임으로 단지 숫자 증가

 


 

해결

import java.io.*;
import java.util.*;

public class Main {

    static int N;
    static int[][] arr;
    static int[][] visited;
    static int beaconValue = 1; // 단지 번호

    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+1][N+1];
        visited = new int[N+1][N+1];

        for(int i=1;i<=N;i++){
            String[] arr1 = br.readLine().split("");

            for(int j=1;j<=N;j++){
                arr[i][j] = Integer.parseInt(arr1[j-1]);
            }
        }

        for(int y=1;y<=N;y++){
            for(int x=1;x<=N;x++){
                if(arr[y][x] == 1 && visited[y][x] == 0) {
                    dfs(y, x);
                    beaconValue += 1; // 단지 번호 증가
                }
            }
        }

        // 단지 수
        int danziCount = beaconValue - 1;

        int[] result = new int[danziCount];

        for(int y=1;y<=N;y++){
            for(int x=1;x<=N;x++){
                int danziValue = visited[y][x];

                if(0 < danziValue)
                    result[danziValue-1] += 1; // 단지별 집 수
            }
        }

        Arrays.sort(result);

        System.out.println(danziCount);

        for (int j : result) {
            System.out.println(j);
        }
    }

    public static void dfs(int Y, int X){
        if(arr[Y][X] == 0)
            return;

        visited[Y][X] = beaconValue;

        if(0 < X - 1 && arr[Y][X-1] == 1 && visited[Y][X-1] == 0){
            dfs(Y, X-1);
        }

        if(X + 1 <= N && arr[Y][X+1] == 1 && visited[Y][X+1] == 0){
            dfs(Y, X+1);
        }

        if(0 < Y - 1 && arr[Y-1][X] == 1 &&visited[Y-1][X] == 0){
            dfs(Y-1, X);
        }

        if(Y + 1 <= N && arr[Y+1][X] == 1 &&visited[Y+1][X] == 0){
            dfs(Y+1, X);
        }
    }
}
728x90

'Algorithm > Baekjoon' 카테고리의 다른 글

[Baekjoon] 2606번 바이러스(feat. Java)  (0) 2024.11.15
[Baekjoon] 1260번 DFS와 BFS(feat. Java)  (0) 2024.11.14
[Baekjoon] 2178번 미로 탐색(feat. Java)  (0) 2024.11.06
    'Algorithm/Baekjoon' 카테고리의 다른 글
    • [Baekjoon] 2606번 바이러스(feat. Java)
    • [Baekjoon] 1260번 DFS와 BFS(feat. Java)
    • [Baekjoon] 2178번 미로 탐색(feat. Java)
    sggnology
    sggnology
    하늘은 파란색이니까 내 삶도 파란색이길 ㅎㅎ

    티스토리툴바