본문 바로가기
Algorithm/Weekly Solved

[백준 2606] 바이러스 - Java 코드

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

 

2606번: 바이러스

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

www.acmicpc.net

 

문제

 

접근

네트워크에 대한 입력값들을 이차원 배열에 담고,

방문여부를 체크할 Bool 배열을 선언하여 dfs를 구현해주었다. 

 

풀이

import java.util.Arrays;
import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int com = sc.nextInt();
		int idx = sc.nextInt();
		int networks[][] = new int[idx][2]; 
		for(int i=0;i<idx;i++) {
			networks[i][0] = sc.nextInt();
			networks[i][1] = sc.nextInt();
		}
		Boolean flag[] = new Boolean[com];
		Arrays.fill(flag, false);
		dfs(1,flag,networks);
		int ans=0;
		for(Boolean a : flag)
			if(a) ans++;
		System.out.println(ans-1);
	}
	private static void dfs(int idx, Boolean[] flag,int networks[][]) {
		flag[idx-1] = true;
		for(int i=0;i<networks.length;i++) {
			if(!flag[networks[i][1]-1] && networks[i][0] == idx) dfs(networks[i][1],flag, networks);
			if(!flag[networks[i][0]-1] && networks[i][1] == idx) dfs(networks[i][0],flag, networks);
		}
	}
}

1번에서 부터 시작해서 감염될때마다 flag에 설정을 해준다.

설정해줌과 동시에 count를 해주도록 만들면 몇줄을 더 줄일수 있을것 같다.