🌷🌼λͺ¨μ—¬λ΄μš” 개발의숲🌷🌼

[JAVA/μ½”λ”©ν…ŒμŠ€νŠΈ] μ„¬λ‚˜λΌ μ•„μΌλžœλ“œ λ³Έλ¬Έ

개발/μ•Œκ³ λ¦¬μ¦˜ λ¬Έμ œν’€μ΄ JAVA

[JAVA/μ½”λ”©ν…ŒμŠ€νŠΈ] μ„¬λ‚˜λΌ μ•„μΌλžœλ“œ

μš”μΌμ΄ 2022. 3. 22. 00:12
λ°˜μ‘ν˜•

μ„€λͺ…

N*N의 μ„¬λ‚˜λΌ μ•„μΌλžœλ“œμ˜ 지도가 격자판의 μ •λ³΄λ‘œ μ£Όμ–΄μ§‘λ‹ˆλ‹€.

각 섬은 1둜 ν‘œμ‹œλ˜μ–΄ μƒν•˜μ’Œμš°μ™€ λŒ€κ°μ„ μœΌλ‘œ μ—°κ²°λ˜μ–΄ 있으며, 0은 λ°”λ‹€μž…λ‹ˆλ‹€.

μ„¬λ‚˜λΌ μ•„μΌλžœλ“œμ— λͺ‡ 개의 섬이 μžˆλŠ”μ§€ κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ„Έμš”.

λ§Œμ•½ μœ„μ™€ κ°™λ‹€λ©΄ μ„¬μ˜ κ°œμˆ˜λŠ” 5κ°œμž…λ‹ˆλ‹€.

μž…λ ₯

첫 번째 쀄에 μžμ—°μˆ˜ N(3<=N<=20)이 μ£Όμ–΄μ§‘λ‹ˆλ‹€.

두 번째 쀄뢀터 격자판 정보가 주어진닀.

좜λ ₯

첫 번째 쀄에 μ„¬μ˜ 개수λ₯Ό 좜λ ₯ν•œλ‹€.

μ˜ˆμ‹œ μž…λ ₯ 1 

7
1 1 0 0 0 1 0
0 1 1 0 1 1 0
0 1 0 0 0 0 0
0 0 0 1 0 1 1
1 1 0 1 1 0 0
1 0 0 0 1 0 0
1 0 1 0 1 0 0

μ˜ˆμ‹œ 좜λ ₯ 1

5

 

 

 

import java.util.*;

class Point{

    int x, y;

    public Point(int tmpX, int tmpY) {
        this.x = tmpX;
        this.y = tmpY;
    }

}

public class Main {

    static int n;
    static int[] disX = {0, 1, 0, -1, -1, 1, -1, 1};
    static int[] disY = {1, 0, -1, 0, -1, -1, 1, 1};
    static int[][] array;
    static int[][] dis;
    static Queue<Point> qu = new LinkedList<>();
    static int answer = 0;

    public void DFS(int x, int y){

        if(dis[x][y] == 1){
            return;
        }else{

            dis[x][y] = 1;

            for (int i = 0; i < 8; i++) {

                int tmpX = x + disX[i];
                int tmpY = y + disY[i];

                if(tmpX >= 0 && tmpY >= 0 && tmpX < n && tmpY < n && array[tmpX][tmpY] == 1){
                    DFS(tmpX, tmpY);
                }

            }

        }


    }

    public static void main(String[] args) {

        Main main = new Main();

        Scanner in = new Scanner(System.in);

        n = in.nextInt();

        array = new int[n][n];
        dis = new int[n][n];

        for(int i=0; i<n; i++){
            for(int j=0; j<n; j++){
                array[i][j] = in.nextInt();
                if(array[i][j] == 1){
                    qu.offer(new Point(i, j));
                }
            }
        }


        while(!qu.isEmpty()){
            Point tmp = qu.poll();
            if(dis[tmp.x][tmp.y] != 1){
                main.DFS(tmp.x,tmp.y);
                answer++;
            }
        }

        System.out.println(answer);

    }
}
Comments