๊ธฐ๋ก๋ฐฉ

BOJ_2667 : ๋‹จ์ง€๋ฒˆํ˜ธ๋ถ™์ด๊ธฐ ๋ณธ๋ฌธ

CodingTest/Java

BOJ_2667 : ๋‹จ์ง€๋ฒˆํ˜ธ๋ถ™์ด๊ธฐ

Soom_1n 2023. 1. 26. 10:04

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ

 

2667๋ฒˆ: ๋‹จ์ง€๋ฒˆํ˜ธ๋ถ™์ด๊ธฐ

<๊ทธ๋ฆผ 1>๊ณผ ๊ฐ™์ด ์ •์‚ฌ๊ฐํ˜• ๋ชจ์–‘์˜ ์ง€๋„๊ฐ€ ์žˆ๋‹ค. 1์€ ์ง‘์ด ์žˆ๋Š” ๊ณณ์„, 0์€ ์ง‘์ด ์—†๋Š” ๊ณณ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ฒ ์ˆ˜๋Š” ์ด ์ง€๋„๋ฅผ ๊ฐ€์ง€๊ณ  ์—ฐ๊ฒฐ๋œ ์ง‘์˜ ๋ชจ์ž„์ธ ๋‹จ์ง€๋ฅผ ์ •์˜ํ•˜๊ณ , ๋‹จ์ง€์— ๋ฒˆํ˜ธ๋ฅผ ๋ถ™์ด๋ ค ํ•œ๋‹ค. ์—ฌ

www.acmicpc.net



๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

  • n X n ์ง€๋„์—์„œ ๋ถ™์–ด์žˆ๋Š” ์ง‘ (1)์„ ์ฐพ์•„ ๋‹จ์ง€ ๋ณ„๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค.
    • ๋‹จ์ง€์˜ ์ˆ˜์™€ ๊ฐ ๋‹จ์ง€๋ณ„ ์ง‘์˜ ์ˆ˜๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ถœ๋ ฅํ•œ๋‹ค.
  • BFS๋กœ ํƒ์ƒ‰ํ•ด ๋ถ™์–ด์žˆ๋Š” ์ง‘์˜ ์ˆ˜์™€ ๋‹จ์ง€ ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค.

๐Ÿ”ธ ์ฝ”๋“œ ๐Ÿ”ธ

import java.util.*;

public class Main {
    public static void main(String[] args) {
        // 1) input
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[][] arr = new int[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';
            }
        }

        // 2) BFS
        int dangi = 1;
        int[] dx = {-1, 0, 1, 0};
        int[] dy = {0, 1, 0, -1};
        boolean[][] visit = new boolean[n][n];
        Stack<Pair> stack;
        ArrayList<Integer> answer = new ArrayList<>();

        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {

                stack = new Stack<>();
                stack.push(new Pair(i, j));
                int count = 0;

                while (!stack.isEmpty()) {

                    Pair pair = stack.pop();

                    if (0 <= pair.x && pair.x < n && 0 <= pair.y && pair.y < n && !visit[pair.x][pair.y] && arr[pair.x][pair.y] == 1) {

                        count++;
                        visit[pair.x][pair.y] = true;
                        arr[pair.x][pair.y] = dangi;

                        for (int k = 0; k < 4; k++) {
                            stack.push(new Pair(pair.x + dx[k], pair.y + dy[k]));
                        }
                    }
                }
                if (count > 0) {
                    answer.add(count);
                    dangi++;
                }
            }
        }

        Collections.sort(answer);
		
        // 3) print
        System.out.println(dangi - 1);
        for (int i = 0; i < dangi - 1; i++) {
            System.out.println(answer.get(i));
        }
    }

    private static class Pair {
        int x, y;

        Pair(int x, int y) {
            this.x = x;
            this.y = y;
        }
    }
}

 

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • 1) ์ง€๋„์˜ ํ•œ ๋ณ€์˜ ๊ธธ์ด n๊ณผ nxn ์ง€๋„ ์ •๋ณด๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ intํ˜• 2์ฐจ์› ๋ฐฐ์—ด arr์— ์ €์žฅํ•œ๋‹ค.
  • 2) BFS๋กœ ๋‹จ์ง€๋ฅผ ํƒ์ƒ‰ํ•œ๋‹ค.
    • ๋ชจ๋“  ์ง‘์„ ์‹œ์ž‘ ๋…ธ๋“œ๋กœ ๋„ฃ์–ด๋ณธ๋‹ค.
    • ์Šคํƒ์ด ๋นŒ ๋•Œ๊นŒ์ง€ ๊ณ„์‚ฐ์„ ๋ฐ˜๋ณตํ•ด ๊ฐ™์€ ๋‹จ์ง€ ์†Œ์†์˜ ์ง‘๋“ค์„ ์ฐพ๋Š”๋‹ค.
      • x, y๊ฐ€ ์ง€๋„ ๋‚ด์˜ ๋ฒ”์œ„์ด๋ฉฐ, ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ง‘์ด๊ณ , ๊ฐ’์ด 1์ด๋ฉด ๋ฐฉ๋ฌธํ•˜๊ณ  ์ฃผ๋ณ€ ์ง‘์„ ํƒ์ƒ‰ํ•œ๋‹ค.
    • count > 0 : ํ•œ ์ง‘์ด๋ผ๋„ ๋ฐฉ๋ฌธํ–ˆ์œผ๋ฉด ๋‹จ์ง€์ด๋ฏ€๋กœ, ๋‹จ์ง€ ์ˆ˜๋ฅผ ๋Š˜๋ฆฌ๊ณ  ์ง‘์˜ ์ˆ˜๋ฅผ answer์— ์ €์žฅํ•œ๋‹ค.
    • answer๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•œ๋‹ค.
  • 3) ๋‹จ์ง€ ์ˆ˜ dangi ์™€ answer ์˜ ์š”์†Œ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • BFS๋กœ ํ’€ ์ˆ˜ ์žˆ๋Š” ๊ฐ„๋‹จํ•œ ๋ฌธ์ œ์˜€๋‹ค.
  • ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋„ ์—ฌ๋Ÿฟ ๋งŒ๋“ค๊ณ  ๊ณต์œ ๋„ ํ•ด๋ณด์•˜๋‹ค.
// 1) : 1 25

5
11111
11111
11111
11111
11111

// 2) : 3 4 20 36

10
1111111111
1000000001
1011111101
1010000101
1010110101
1010110101
1010000101
1011111101
1000000001
1111111111

// 3) : 1 96

25
1111111111111111111111111
1000000000000000000000001
1000000000000000000000001
1000000000000000000000001
1000000000000000000000001
1000000000000000000000001
1000000000000000000000001
1000000000000000000000001
1000000000000000000000001
1000000000000000000000001
1000000000000000000000001
1000000000000000000000001
1000000000000000000000001
1000000000000000000000001
1000000000000000000000001
1000000000000000000000001
1000000000000000000000001
1000000000000000000000001
1000000000000000000000001
1000000000000000000000001
1000000000000000000000001
1000000000000000000000001
1000000000000000000000001
1000000000000000000000001
1111111111111111111111111


// 4) : 50 1 1 1...(46)...1

10
1010101010
0101010101
1010101010
0101010101
1010101010
0101010101
1010101010
0101010101
1010101010
0101010101
  • ๋ฌธ์ œ ๋ถ„์„, ์ฝ”๋”ฉ ๊ณ„ํš์„ ๋ฏธ๋ฆฌ ์จ๋ณด๋ฉฐ ํ’€์ดํ–ˆ๋‹ค.

728x90