문제 풀이/백준

[백준] 2606번. 바이러스(JAVA)

27200 2025. 1. 3. 22:01

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


풀이(23분)

import java.io.*;
import java.util.*;

public class Main{
    static int n;
    static int m;
    static int[][] arr;
    static boolean[] visited;
    static Queue<Integer> queue = new LinkedList<>();
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;

        n = Integer.parseInt(br.readLine());
        m = Integer.parseInt(br.readLine());

        arr = new int[n][n];
        visited = new boolean[n];
        visited[0] = true;

        for(int i = 0; i < m; i++){
            st = new StringTokenizer(br.readLine());
            int first = Integer.parseInt(st.nextToken()) - 1;
            int second = Integer.parseInt(st.nextToken()) - 1;
            arr[first][second] = 1;
            arr[second][first] = 1;
        }

        int answer = 0;

        for(int i = 0; i < n; i++){
            if(arr[0][i] == 1){
                queue.add(i);
                answer++;
                visited[i] = true;
            }
        }

        while(!queue.isEmpty()){
            int temp = queue.poll();
            for(int i = 0; i < n; i++){
                if(arr[temp][i] == 1){
                    if(!visited[i]){
                        queue.add(i);
                        answer++;
                        visited[i] = true;
                    }
                }
            }
        }

        System.out.println(answer);
    }
}

 

문제자체는 1차원 방문 배열을 활용하여 방문처리를 하며 BFS로 문제를 해결하는 단순한 문제이다.

 

하지만 23분이라는 시간을 쓴 것에 있어서는 백준 제출칸을 그대로 이용해 풀어보려는 연습을 하고 있고, 이는 출력에 대한 결과가 제공되지 않기에 visited [0]을 먼저 true로 바꿔줘야 하는 부분에서 긴 시간이 걸렸다.

 

꼼꼼히 풀고 확인하는 연습을 해야될 것 같다.