๊ธฐ๋ก๋ฐฉ

BOJ_4963 : ์„ฌ์˜ ๊ฐœ์ˆ˜ ๋ณธ๋ฌธ

CodingTest/Java

BOJ_4963 : ์„ฌ์˜ ๊ฐœ์ˆ˜

Soom_1n 2023. 2. 21. 13:57

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

 

4963๋ฒˆ: ์„ฌ์˜ ๊ฐœ์ˆ˜

์ž…๋ ฅ์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ฒซ์งธ ์ค„์—๋Š” ์ง€๋„์˜ ๋„ˆ๋น„ w์™€ ๋†’์ด h๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. w์™€ h๋Š” 50๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์–‘์˜ ์ •์ˆ˜์ด๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ h๊ฐœ ์ค„์—๋Š” ์ง€๋„

www.acmicpc.net



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

  • h x w ํฌ๊ธฐ์˜ ์ง€๋„๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.
    • 1์€ ๋•…, 0์€ ๋ฐ”๋‹ค์ด๋‹ค.
    • ๋•…์€ ์ฃผ๋ณ€ 8๋ฐฉํ–ฅ์œผ๋กœ ๊ฑด๋„ˆ๋‹ค๋‹ ์ˆ˜ ์žˆ๋‹ค.
    • ๊ฑด๋„ˆ๋‹ค๋‹ ์ˆ˜ ์žˆ์œผ๋ฉด ๊ฐ™์€ ์„ฌ์ด๋‹ค.
    • ์„ฌ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
  • BFS๋กœ ํ’€์ดํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์ง€๋„์˜ ๋ชจ๋“  ์นธ์„ ์ˆœํšŒํ•˜๋ฉฐ ํ™•์ธํ•œ๋‹ค.
    • ๋•…์„ ๋ฐœ๊ฒฌํ•˜๋ฉด ์ธ์ ‘ํ•œ ๋•… ๋ชจ๋‘๋ฅผ ์ฒดํฌํ•œ๋‹ค.
    • ์ฒดํฌํ•œ ๋•…์€ ๋‹ค์‹œ ๋ฐœ๊ฒฌํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • ์ฒดํฌ ํšŸ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

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

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Queue;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int[] dx = {-1, -1, 0, 1, 1, 1, 0, -1}; //์ƒ ์ƒ์šฐ ์šฐ ์šฐํ•˜ ํ•˜ ์ขŒํ•˜ ์ขŒ ์ขŒ์ƒ
        int[] dy = {0, 1, 1, 1, 0, -1, -1, -1};

        while (true) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int w = Integer.parseInt(st.nextToken());
            int h = Integer.parseInt(st.nextToken());

            if (w == 0 || h == 0) break;

            int[][] map = new int[h][w];
            for (int i = 0; i < h; i++) {
                st = new StringTokenizer(br.readLine());
                for (int j = 0; j < w; j++) {
                    map[i][j] = Integer.parseInt(st.nextToken());
                }
            }
            // input done.


            // BFS
            int answer = 0;
            for (int i = 0; i < h; i++) {
                for (int j = 0; j < w; j++) {
                    if (map[i][j] == 1) {
//                        print(map);
                        answer++;

                        Queue<Pair> que = new ArrayDeque<>();
                        que.add(new Pair(i, j));
                        map[i][j] += answer;

                        while (!que.isEmpty()) {
                            Pair pair = que.poll();

                            for (int k = 0; k < 8; k++) {
                                int x = pair.x + dx[k];
                                int y = pair.y + dy[k];

                                if (0 <= x && x < h && 0 <= y && y < w && map[x][y] == 1) {
                                    que.add(new Pair(x, y));
                                    map[x][y] += answer;
                                }
                            }
                        }
                    }
                }
            }
            System.out.println(answer);
        }
    }

    private static class Pair {
        int x, y;

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

    private static void print(int[][] map) {
        System.out.println();
        for (int i = 0; i < map.length; i++) {
            for (int j = 0; j < map[i].length; j++) {
                System.out.print(map[i][j] + " ");
            }
            System.out.println();
        }
        System.out.println("================================");
    }
}

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

  • ์ง€๋„ ์ •๋ณด๋ฅผ 2์ฐจ์› ๋ฐฐ์—ด map์— ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค.
  • ์ง€๋„์˜ ๊ฐ ์นธ์„ ์ˆœํšŒํ•˜๋ฉฐ 1์„ ์ฐพ๋Š”๋‹ค.
    • answer๋ฅผ +1 ํ•œ๋‹ค. 
    • 1๋ถ€ํ„ฐ BFS๋กœ ์ธ์ ‘ํ•œ ์นธ์„ ์ฐพ์•„ answer๋ฅผ ๋”ํ•œ๋‹ค.
  • answer๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • BFS๋กœ ๊ฐ„๋‹จํžˆ ํ’€์–ด๋ƒˆ๋‹ค.
  • ํƒœ๊ทธ๋ฅผ ๋ณด๋‹ˆ DFS๋กœ ํ’€์ดํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ƒ๊ฐํ•ด๋ณด๋‹ˆ ์ตœ๋‹จ๊ฑฐ๋ฆฌ ์ฐพ๊ธฐ๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ BFS๋ณด๋‹ค DFS๊ฐ€ ๋น ๋ฅผ ๊ฒƒ ๊ฐ™๋‹ค.

728x90

'CodingTest > Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

BOJ_3109 : ๋นต์ง‘  (0) 2023.02.22
BOJ_6987 : ์›”๋“œ์ปต  (0) 2023.02.21
BOJ_17281 : โšพ  (0) 2023.02.20
BOJ_12865 : ํ‰๋ฒ”ํ•œ ๋ฐฐ๋‚ญ  (0) 2023.02.20
BOJ_14888 : ์—ฐ์‚ฐ์ž ๋ผ์›Œ๋„ฃ๊ธฐ  (0) 2023.02.20