본문 바로가기
알고리즘/백준 BOJ

[ BOJ/C# ] 2606 바이러스

by 왹져박사 2023. 9. 24.
728x90

https://www.acmicpc.net/problem/2606

 

2606번: 바이러스

첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하인 양의 정수이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍

www.acmicpc.net

BFS/DFS로 풀 수 있는 문제이다. 

나는 BFS로 풀었다. 아직 BFS의 형식이 자연스럽게 나오지는 않는다. 

그래서 처음 배웠던 포스팅을 매번 다시 문제에 맞게 변형하며 공부한다. 이 과정은 꽤나 재미있게 느껴진다. 

처음에는 그저 형식을 암기해서 풀어나갔다면, 지금은 이 부분에서는 이렇게 풀어나가면 되겠구나?생각이 든다. 

마냥 어렵기만 하던 BFS의 로직이 이해가 가기 시작했다. 다음에는 DFS로도 풀어봐야겠다. 

using System;

namespace B2606
{
    class Program
    {
        static int[] visited = new int[101];
        static void Main()
        {
            StreamReader sr = new StreamReader(Console.OpenStandardInput());
            StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());

            int n = int.Parse(sr.ReadLine());   //n개
            int m = int.Parse(sr.ReadLine());   //m쌍
            Queue<int> q = new Queue<int>();    //방문 예정지
            int[,] map = new int[n + 1, n + 1];
            int count = -1;  //바이러스에 걸리게 되는 컴퓨터의 수, 1번 컴퓨터는 세지 않음
            int x = 1;  //1번 컴퓨터에서 시작

            for(int i = 0; i < m; i++)  //m쌍의 입력을 받아 map 만들기
            {
                int[] pc = Array.ConvertAll(sr.ReadLine().Split(' '), int.Parse);
                map[pc[0], pc[1]] = 1;
                map[pc[1], pc[0]] = 1;
            }

            q.Enqueue(x);
            while (q.Count > 0)
            {
                x = q.Dequeue();
                if (visited[x] == 0)    //방문기록 없다면
                {
                    visited[x] = 1; // x방문
                    count++;    //바이러스+1
                }
                for (int y= 1; y <= n; y++) //연결되어있고 방문기록 없다면, 방문예정지에 추가
                    if (map[x, y] == 1 && visited[y] == 0) q.Enqueue(y);
            }
            sw.Write(count);
            sr.Close();
            sw.Flush();
            sw.Close();
        }
    }
}

 

728x90

'알고리즘 > 백준 BOJ' 카테고리의 다른 글

[ BOJ/C# ] 1260 DFS와 BFS  (0) 2023.09.26
[ BOJ/C# ] 11724 연결 요소의 개수  (0) 2023.09.26
[ BOJ/C# ] 9461 파도반 수열  (0) 2023.09.24
[ BOJ/C# ] 11727 2×n 타일링 2  (0) 2023.09.23
[ BOJ/C# ] 11726 2×n 타일링  (0) 2023.09.22