ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Q. 2606 바이러스
    코딩테스트/백준_Java 2023. 4. 4. 09:04

    Q. 2606 바이러스
     
    문제 : boj.kr/2606
    실버 3 난이도의 문제이다.
     
    컴퓨터의 수와 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어지고
    이후에 연결된 컴퓨터 쌍이 주어진다
    이 때 1번 컴퓨터가 바이러스에 걸렸다면, 1번 컴퓨터를 통해 바이러스에 걸리게 되는 컴퓨터의 수를 계산하는 문제이다.
     
    이를 그래프로 설명하자면
    양방향 그래프가 주어지고 정점과 간선의 수 그리고 간선이 주어진다.
    이 때 1번 정점에 연결된 다른 정점의 수를 계산하는 문제이다.
     
    그래프와 연결된 간선을 List로 구현한 뒤 dfs, bfs 두 방식으로 풀었다
     
    List를 이용한 그래프 탐색의 경우
    정점을 V, 간선을 E라고 하면 시간복잡도가 O(V + E)이고
    문제 조건에서 정점이 최대 100개이므로 이 경우 간선이 4950개 나올 수 있다.
    따라서 약 5050번 계산하면 문제를 풀 수 있으므로 상수 시간 안에 이 문제를 해결할 수 있다.
    (정점이 최대 100개일 경우 간선의 수는 99 + 98 + 97 + .... + 3 + 2 + 1 = 100 * 50 = 4950)


    내 풀이는 아래와 같다

    import java.io.*;
    import java.util.*;
    
    
    public class Main {
        static FastReader scan = new FastReader();
        static StringBuilder sb = new StringBuilder();
    
        static int V, E;
        static List<Integer>[] list;
        static boolean[] visit;
    
        static int res = 0;
    
        static void input() {
    
            V = scan.nextInt();
            E = scan.nextInt();
            visit = new boolean[V + 1];
            list = new List[V + 1];
            for (int i = 1; i <= V; i++) list[i] = new ArrayList<>();
            for (int i = 0; i < E; i++) {
                int s = scan.nextInt();
                int e = scan.nextInt();
                list[s].add(e);
                list[e].add(s);
            }
        }
    
        static int bfs() {
    
            int cnt = 0;
            Queue<Integer> que = new LinkedList<>();
            visit[1] = true;
            for (int v: list[1]) {
                que.add(v);
                visit[v] = true;
            }
    
            while (!que.isEmpty()) {
                int v =  que.poll();
                cnt++;
                for (int i: list[v]) {
                    if (!visit[i]) {
                        que.add(i);
                        visit[i] = true;
                    }
                }
            }
            return cnt;
        }
    
        static void dfs(int v) {
            visit[v] = true;
            for (int i: list[v]) {
                if (!visit[i]) {
                    res++;
                    dfs(i);
                }
            }
        }
    
        static void pro() {
    //        System.out.println(bfs());
            dfs(1);
            System.out.println(res);
        }
    
        public static void main(String[] args) {
            input();
            pro();
        }
    
    
        static class FastReader {
            BufferedReader br;
            StringTokenizer st;
    
            public FastReader() {
                br = new BufferedReader(new InputStreamReader(System.in));
            }
    
            public FastReader(String s) throws FileNotFoundException {
                br = new BufferedReader(new FileReader(new File(s)));
            }
    
            String next() {
                while (st == null || !st.hasMoreElements()) {
                    try {
                        st = new StringTokenizer(br.readLine());
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                return st.nextToken();
            }
    
            int nextInt() {
                return Integer.parseInt(next());
            }
    
            long nextLong() {
                return Long.parseLong(next());
            }
    
            double nextDouble() {
                return Double.parseDouble(next());
            }
    
            String nextLine() {
                String str = "";
                try {
                    str = br.readLine();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                return str;
            }
        }
    }
    반응형

    '코딩테스트 > 백준_Java' 카테고리의 다른 글

    Q. 11725 자바 : 트리의 부모 찾기  (0) 2023.04.06
    Q. 11403 자바 : 경로 찾기  (0) 2023.04.05
    Q. 14502 연구소  (0) 2023.04.03
    Q. 3184 자바 : 양  (0) 2023.04.02
    Q. 4963 자바 : 섬의 개수  (0) 2023.04.01

    댓글

Designed by Tistory.