CodeLabs

[백준 / C#] 2667 : 단지번호붙이기 본문

백준/1000 ~

[백준 / C#] 2667 : 단지번호붙이기

무오_ 2023. 8. 7. 22:47
using System;
using System.Collections.Generic;

namespace _2667
{
    class Program
    {
        static int n, cnt;
        static int[] dx = { 0, 1, 0, -1 }, dy = { -1, 0, 1, 0 }; //상하좌우 표현
        static string[] input = new string[25];
        static bool[,] vi = new bool[25, 25];
        static List<int> result = new List<int>();
        static void DFS(int i, int j)
        {
            vi[i, j] = true;
            cnt++;
            for(int k=0; k<4; k++)
            {
                int newY = i + dy[k];
                int newX = j + dx[k];

                if (0 <= newX && newX < n && 0 <= newY && newY < n)
                    if ((input[newY])[newX] == '1' && !vi[newY, newX])
                        DFS(newY, newX);
            }           
        }
        static void Input()
        {
            n = int.Parse(Console.ReadLine());
            for (int i = 0; i < n; i++) input[i] = Console.ReadLine();
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    if ((input[i])[j] == '1' && !vi[i, j])
                    {
                        cnt = 0;
                        DFS(i, j);
                        result.Add(cnt);
                    }
                }
            }
            result.Sort();
            Console.WriteLine(result.Count);
            for (int i = 0; i < result.Count; i++)
                Console.WriteLine(result[i]);
        }
        static void Solve()
        {
            Input();
        }
        static void Main(string[] args)
        {
            Solve();
        }
    }
}

'백준 > 1000 ~' 카테고리의 다른 글

[백준 / C#] 2805 : 나무 자르기  (0) 2023.08.09
[백준 / C#] 2630 : 색종이 만들기  (0) 2023.08.04
[백준 / C#] 2606 : 바이러스  (0) 2023.08.02
[백준 / C#] 2579 : 계단 오르기  (0) 2023.07.30
[백준 / C#] 2178 : 미로탐색  (0) 2023.07.28