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

[์•Œ๊ณ ๋ฆฌ์ฆ˜ PS] ๋ฐฑ์ค€ 2667๋ฒˆ ๋‹จ์ง€๋ฒˆํ˜ธ๋ถ™์ด๊ธฐ ์ž๋ฐ” ๋ฌธ์ œํ’€์ด

by Wonit 2021. 2. 10.

๋ฌธ์ œ

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

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

๋ฌธ์ œ ์ ‘๊ทผ

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


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


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

 

ํ•˜์ง€๋งŒ ์ง€๋‚œ ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜ ๋ฌธ์ œ ํ’€์ด์™€ ๋‹ค๋ฅธ ์ ์ด๋ผ๊ณ  ํ•œ๋‹ค๋ฉด, ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๊ฐ€ ์•„๋‹ˆ๋ผ ์ด์ฐจ์› ํ–‰๋ ฌ์ด ๊ทธ๋ž˜ํ”„๊ฐ€ ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋Š” ํ•˜๋‚˜์˜ ๋…ธ๋“œ๊ฐ€ ๋ช‡ ๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ๊ฐ–๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š๊ณ , ์–ผ๋งˆ๋‚˜ ๊นŠ์€ Depth๋ฅผ ๊ฐ–๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์„ ๋•Œ ์ž์ฃผ ์‚ฌ์šฉ๋œ๋‹ค.

 

ํ•˜์ง€๋งŒ ์ด๋Ÿฐ์‹์œผ๋กœ ํ–‰๋ ฌ์ด ๋…ธ๋“œ๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ์—๋Š” ํ•˜๋‚˜์˜ ๋…ธ๋“œ๋Š” ์ตœ๋Œ€ 4๊ฐœ์™€ ์—ฐ๊ฒฐ๋œ๋‹ค๋Š” ํŠน์ง•์„ ์•Œ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•ด๋„ ๋ฌด๋ฆฌ๊ฐ€ ์—†๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ์ด ๋ฌธ์ œ ๋˜ํ•œ ์—ฐ๊ฒฐ ์š”์†Œ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ dfs ํƒ์ƒ‰์„ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค.

์˜ค๋‹ต ํ›„๋ณด

์šฐ์„  ๊ธฐ์ € ์‚ฌ๋ก€๊ฐ€ 2๊ฐœ๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

  1. x, y๊ฐ€ ๋ฒ”์œ„๋ฅผ ๋„˜์–ด๊ฐˆ ๊ฒฝ์šฐ
  2. graph[x][y] == 0 ์ฆ‰ ์ง‘์ด ์•„๋‹Œ ๊ฒฝ์šฐ

๋˜ ๋‹ค๋ฅธ ์˜ค๋‹ต ํ›„๋ณด๋Š”, ๋ฌธ์ œ์—์„œ ๊ฐ ๋‹จ์ง€์— ์†ํ•˜๋Š” ์ง‘์˜ ์ˆ˜๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜์—ฌ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.๋ผ๊ณ  ๋‚˜์™”๋‹ค.

 

๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•  ๋•Œ ์ •๋ ฌ์„ ํ•œ ๋ฒˆ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค.

์ •๋‹ต ์ฝ”๋“œ

import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;

public class Main {
    static int[][] graph;
    static int count;
    static int n;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        n = Integer.parseInt(br.readLine());

        graph = new int[n][n];
        ArrayList<Integer> answer = new ArrayList<>();

        for (int i = 0; i < n; i++) {
            String[] house = br.readLine().split("");
            for (int j = 0; j < n; j++) {
                graph[i][j] = Integer.parseInt(house[j]);
            }
        }
        int called = 0;

        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                if(dfs(i, j)) {
                    called++;
                    answer.add(count);
                    count = 0;
                }
            }
        }
        bw.write(called + "\n");
        Collections.sort(answer);
        for(int number: answer) bw.write(number + "\n");
        bw.flush();
        bw.close();
    }

    private static boolean dfs(int x, int y) {
        if(x < 0 || y < 0 || x > n-1 || y > n-1) return false;
        if(graph[x][y] == 0) return false;
        graph[x][y] = 0;
        count++;
        dfs(x + 1, y);
        dfs(x - 1, y);
        dfs(x, y + 1);
        dfs(x, y - 1);

        return true;
    }
}

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

๋Œ“๊ธ€