Java/Algorithm

[Java-Algorithm] 백준 2606 바이러스 풀이

Jeong Jeon
반응형

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

 

2606번: 바이러스

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

www.acmicpc.net

 

풀이 : 

DFS 그래프로 풀었다...

전역으로 Cnt 놓고, 순서대로 시작 정점부터 재귀를 통해 Cnt하는 방법으로 풀었다.

	static int cnt = 0;
	public static void main(String[] args) throws Exception{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int N = Integer.parseInt(br.readLine());//컴퓨터 수
		int M = Integer.parseInt(br.readLine());//쌍 갯수

		LinkedList<Integer>[] adjList = new LinkedList[N+1];
		boolean[] visited = new boolean[N+1];

		for (int i = 0; i < adjList.length; i++) {
			adjList[i] = new LinkedList<Integer>();
		}

		//간선 만들기
		for (int i = 0; i < M; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			int start = Integer.parseInt(st.nextToken());
			int end = Integer.parseInt(st.nextToken());
			adjList[start].add(end);
			adjList[end].add(start);
		}

		for (int j = 0; j < adjList.length; j++) {
			Collections.sort(adjList[j]);
		}

		dfsList(1,adjList,visited);
		System.out.println(cnt-1);//처음1번 컴퓨터는 빼야됨
	}

	static void dfsList(int v, LinkedList<Integer>[] adjList, boolean[] visited) {
		visited[v] = true;
		cnt ++;
		Iterator<Integer> iter = adjList[v].iterator();
		while(iter.hasNext()) {
			int m = iter.next();
			if(!visited[m]) {
				dfsList(m,adjList,visited);
			}
		}
	}
반응형