[백준 2606] 바이러스(Java)

최민길(Gale)·2023년 2월 18일
1

알고리즘

목록 보기
38/172

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

이 문제는 연결 리스트와 dfs를 이용하여 풀 수 있습니다. 연결 리스트란 노드를 저장할 때 그 다음 순서의 자료가 있는 위치를 데이터에 포함시키는 방식으로 자료를 저장하는 자료 구조입니다. 따라서 하나의 노드, 즉 하나의 컴퓨터와 연결되어 있는 다른 컴퓨터 값들을 컴퓨터 인덱스에 저장하여 해당 인덱스를 타고 들어가서 체크하는 방식으로 dfs를 이용하여 문제를 풀 수 있습니다.

다음은 코드입니다.

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

public class Main{
    static int N,M;
    static int res = 0;
    static ArrayList<Integer>[] req = new ArrayList[101];
    static boolean[] check = new boolean[101];

    static void dfs(int n){
        check[n] = true;
        ArrayList<Integer> curr = req[n];

        for(int i=0;i<curr.size();i++){
            int m = curr.get(i);

            if(!check[m]){
                dfs(m);
                res++;
            }
        }
    }

    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        N = Integer.parseInt(br.readLine());
        M = Integer.parseInt(br.readLine());

        for(int i=0;i<101;i++){
            req[i] = new ArrayList<>();
        }

        for(int i=0;i<M;i++){
            StringTokenizer st = new StringTokenizer(br.readLine());
            int n = Integer.parseInt(st.nextToken());
            int m = Integer.parseInt(st.nextToken());
            req[n].add(m);
            req[m].add(n);
        }

        dfs(1);

        System.out.println(res);
    }
}

profile
저는 상황에 맞는 최적의 솔루션을 깊고 정확한 개념의 이해를 통한 다양한 방식으로 해결해오면서 지난 3년 동안 신규 서비스를 20만 회원 서비스로 성장시킨 Software Developer 최민길입니다.

0개의 댓글

관련 채용 정보