๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿ’ป Computer Science/- Data Structure, Algorithm

[์•Œ๊ณ ๋ฆฌ์ฆ˜ PS] ๋ฐฑ์ค€ 4963๋ฒˆ ์„ฌ์˜ ๊ฐœ์ˆ˜ ์ž๋ฐ” ๋ฌธ์ œํ’€์ด

by Wonit 2021. 2. 10.

๋ฌธ์ œ

ํ•ด๋‹น ํฌ์ŠคํŒ…์€ ๋ฐฑ์ค€์˜ 4963๋ฒˆ ์„ฌ์˜ ๊ฐœ์ˆ˜ ์˜ ์ ‘๊ทผ๊ณผ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•œ ๊ธ€ ์ž…๋‹ˆ๋‹ค.
์ •๋‹ต ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜์‹œ๋ ค๋ฉด solve url ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

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

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

www.acmicpc.net

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ๋จผ์ € ์ƒ๊ฐํ•ด๋ณด์ž.

๋ฌธ์ œ ์ ‘๊ทผ

์ด ๋ฌธ์ œ๋Š” ์ „ํ˜•์ ์ธ Connected Component ๋ฌธ์ œ์ด๋‹ค.


๋‹ค๋ฅธ ๋ง๋กœ๋Š” ์—ฐ๊ฒฐ ์š”์†Œ ์ฐพ๊ธฐ๋ผ๊ณ  ํ•˜๋Š”๋ฐ, ํ•ด๋‹น ๋ฌธ์ œ๋ณด๋‹ค ์กฐ๊ธˆ ์‰ฌ์šด ๋ฒ„์ „์ด ๋ฐฑ์ค€์˜ 11724๋ฒˆ ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜ ๋ฌธ์ œ์ด๋‹ค.


์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜ ๋ฌธ์ œ ํ’€์ด์—์„œ ํ•ด๋‹น ๋ฌธ์ œ์˜ ์ ‘๊ทผ๊ณผ ํ•ด๊ฒฐ์„ ๋ณผ ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ฐธ๊ณ ํ•˜๋ฉด ์ข‹์„ ๋“ฏ ํ•˜๋‹ค.

 

์ด๋ฒˆ ๋ฌธ์ œ์—์„œ๋Š” ํ˜„์žฌ ํƒ์ƒ‰ํ•˜๋Š” ๋…ธ๋“œ์—์„œ ์ƒํ•˜์ขŒ์šฐ + ๋Œ€๊ฐ์„  4์ข…๋ฅ˜ ๋ชจ๋‘ ๊ณ ๋ คํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

ํ•ด๊ฒฐ๋ฒ•

์ƒํ•˜์ขŒ์šฐ, 4๋Œ€๊ฐ์„ ์„ ํƒ์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด dfs๋ฅผ ์žฌ๊ท€ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

static boolean dfs(int x, int y) {
    if(x == -1 || y == -1 || x == n || y == m) return false;
    if(graph[x][y] == 0) return false;

    graph[x][y] = 0;

    dfs(x, y + 1);
    dfs(x, y - 1);

    dfs(x - 1, y);
    dfs(x - 1, y - 1);
    dfs(x - 1, y + 1);

    dfs(x + 1, y);
    dfs(x + 1, y - 1);
    dfs(x + 1, y + 1);

    return true;
}

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด 8๋ฐฉํ–ฅ ๋ชจ๋‘ ํ˜ธ์ถœ์ด ๋˜๋Š”๋ฐ, ์ด๋ ‡๊ฒŒ ๋œ๋‹ค๋ฉด ์ค‘๋ณต์ด ๋งŽ์ด ๋ฐœ์ƒํ•ด์„œ ๋ณด๊ธฐ๊ฐ€ ์•ˆ ์ข‹๋‹ค.

 

์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ ์œ ์šฉํ•˜๊ฒŒ ์“ฐ์ด๋Š” ๋ฐฉ๋ฒ•์ด ์กด์žฌํ•˜๋Š”๋ฐ, ๊ฐ๊ฐ ๋Œ€๊ฐ์„ ๊ณผ ์ƒํ•˜์ขŒ์šฐ ์œ„์น˜๋ฅผ ๋ฐฐ์—ด๋กœ ์ €์žฅํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

static int[] dx = {0, 0, 1, 1, 1, -1, -1, -1};
static int[] dy = {1, -1, 0, -1, 1, -1, 0, 1};

static boolean dfs(int x, int y) {
    if(x == -1 || y == -1 || x == n || y == m) return false;
    if(graph[x][y] == 0) return false;

    graph[x][y] = 0;

    for (int i = 0; i < dx.length; i++) {
        int xx = dx[i];
        int yy = dy[i];
        dfs(x + xx, y + yy);
    }
    return true;
}

์ •๋‹ต ์ฝ”๋“œ

import java.io.*;

public class Main {

    static int n;
    static int m;
    static int[][] graph;
    static int[] dx = {0, 0, 1, 1, 1, -1, -1, -1};
    static int[] dy = {1, -1, 0, -1, 1, -1, 0, 1};

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        while(true) {
            String[] nm = br.readLine().split(" ");
            n = Integer.parseInt(nm[1]);
            m = Integer.parseInt(nm[0]);

            if(n == 0 && m == 0) break;
            graph = new int[n][m];
            for (int i = 0; i < n; i++) {
                String[] map = br.readLine().split(" ");
                for (int j = 0; j < map.length; j++) {
                    graph[i][j] = Integer.parseInt(map[j]);
                }
            }

            int count = 0;
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < m; j++) {
                    if(dfs(i, j)) count++;
                }
            }
            bw.write(count + "\n");
        }
        bw.flush();
        bw.close();
    }

    static boolean dfs(int x, int y) {
        if(x == -1 || y == -1 || x == n || y == m) return false;
        if(graph[x][y] == 0) return false;

        graph[x][y] = 0;

        for (int i = 0; i < dx.length; i++) {
            int xx = dx[i];
            int yy = dy[i];
            dfs(x + xx, y + yy);
        }
        return true;
    }
}

๋ฌธ์ œ ํšŒ๊ณ 

์ด๋ฒˆ ๋ฌธ์ œ๋Š” BFS๋กœ ํ’€์ง€ ๋ชปํ•œ ๋ฌธ์ œ์ด๋‹ค.
n, m์ด ๊ฐ™์€ ์ˆ˜ ์ผ ๋•Œ๋Š” ๋™์ž‘์„ ํ•˜์ง€๋งŒ n, m์ด ์„œ๋กœ ๋‹ค๋ฅธ ์ˆ˜๋ผ๋ฉด loop๋ฅผ ๋น ์ ธ๋‚˜๊ฐ€์ง€ ๋ชปํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.
๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ์—ฌ๋Ÿฌ ๋…ธ๋ ฅ์„ ํ•˜์˜€์œผ๋‚˜ ์Šค์ผ€์ค„๋กœ ์ธํ•ด ๊ฒฐ๊ตญ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•œ ๋ฌธ์ œ์˜€๋‹ค.
WBS์— ์ฒดํฌ ํ•ด๋†“๊ณ  ๋‹ค์Œ์— ๋‹ค์‹œ ํ’€์–ด๋ด์•ผ๊ฒ ๋‹ค.

์ •๋‹ต ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜์‹œ๋ ค๋ฉด solve url ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€