본문 바로가기
PS 문제 풀이/Baekjoon

[BOJ] 백준 2606 바이러스

by 까망 하르방 2021. 2. 23.
반응형

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

 Input 

7

6

1 2

2 3

1 5

5 2

5 6

4 7

 

  

 Output 

4

 

『1』 컴퓨터를 시작 정점으로 연결되어 있는 모든 정점의 개수를 찾습니다.


import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
         
        int N = Integer.parseInt(sc.next());
        int connect = Integer.parseInt(sc.next());
         
        int[][] com = new int[N+1][N+1];
         
         
        for(int i=0; i<connect; i++) {
            int x = Integer.parseInt(sc.next());
            int y = Integer.parseInt(sc.next());
             
            com[x][y] = 1; com[y][x] = 1;
        }
         
        Queue<Integer> queue = new LinkedList<>();
        boolean[] visited = new boolean[N+1];
         
        queue.add(1);
        visited[1] = true;
         
        // 1번 컴퓨터 자체는 counting에서 제외
        int count = 0;
        while(!queue.isEmpty()) {
            int curComputer = queue.poll();
             
            // 현재 컴퓨터와 연결유무를 확인
            for(int i=1; i<=N; i++) {
                // 자기자신이 아니면서 현재 노드와 연결되었으며 아직 감염(방문)되지 않은 컴퓨터라면...
                if(com[curComputer][i] == 1 && !visited[i] ) {
                    visited[i] = true; // 전염표시(방문표시)
                    queue.add(i); // BFS를 위해 큐에 데이터 저장
                    count++; // 전염시켰으므로 counting!
                }
            }
        }
 
        System.out.println(count);
 
    }
}

 

반응형

'PS 문제 풀이 > Baekjoon' 카테고리의 다른 글

[BOJ] 백준 2108 통계학  (0) 2021.02.23
[BOJ] 백준 3184 양  (0) 2021.02.23
[BOJ] 백준 1449 수리공 항승  (0) 2021.02.23
[BOJ] 백준 12851 숨바꼭질 2  (0) 2021.02.23
[BOJ] 백준 1697 숨바꼭질  (0) 2021.02.23

댓글