유블로그

BOJ 2606 바이러스 java 자바 본문

알고리즘

BOJ 2606 바이러스 java 자바

yujeong kang 2021. 7. 27. 20:12

BOJ 2606 바이러스 java 자바

 

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

 

2606번: 바이러스

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

www.acmicpc.net

 

public class BOJ_2606_바이러스 {
	static List<Integer>[] adjustList;
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new BufferedReader(new InputStreamReader(System.in)));
		int N = Integer.parseInt(br.readLine());
		adjustList = new ArrayList[N+1];
		visited = new boolean[N+1];
		for (int i = 1; i <= N; i++) {
			adjustList[i] = new ArrayList<>();
		}
		int M = Integer.parseInt(br.readLine());
		StringTokenizer st;
		for (int i = 0; i < M; i++) {
			st = new StringTokenizer(br.readLine());
			int a = Integer.parseInt(st.nextToken());
			int b = Integer.parseInt(st.nextToken());
		
			adjustList[a].add(b);
			adjustList[b].add(a);
		}
		
		visited[1] = true;
		solve(1);
		
		System.out.println(ANS);
		
	} // main
	
	static int ANS = 0;
	static boolean[] visited;
	private static void solve(int num) {
		for (int i = 0; i < adjustList[num].size(); i++) {
			int next = adjustList[num].get(i);
			if(visited[next]) continue;
			visited[next] = true;
			ANS++;
			solve(next);
		}
		
	} // solve
}

 

일반적인 DFS 문제인 듯...??

나는 List 배열을 만들어서 각 컴퓨터에 연결된 정점들을 add 하고

visited 배열로 방문체크를 하여 solve 함수에 들어갈 때 방문된 컴퓨터면 들어가지 않았다.