Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

도누쓰코딩죽이기

[백준] 2606 바이러스 본문

알고리즘CPR

[백준] 2606 바이러스

차도누 2020. 8. 15. 14:35

문제

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

 

2606번: 바이러스

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

www.acmicpc.net

소스코드

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main_2606_바이러스 {
	static int N,M;
	static int[][] map;
	static boolean[] visited;
	public static void main(String[] args) throws Exception{
		
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = null;
		
		N = Integer.parseInt(in.readLine());	//컴퓨터의 수
		M = Integer.parseInt(in.readLine());	//연결된 링크의 수
		
		map = new int[N][N];
		visited = new boolean[N];
		for (int i = 0; i < M; i++) {
			st = new StringTokenizer(in.readLine());
			int a = Integer.parseInt(st.nextToken())-1;
			int b = Integer.parseInt(st.nextToken())-1;
			map[a][b] = map[b][a] = 1;
		}
		
		dfs(0);
		
		int result = -1;
		for (int i = 0; i < N; i++) {
			if(visited[i]) {
				result++;
			}
		}
		System.out.println(result);
	}
	private static void dfs(int cur) {
		visited[cur] = true;
		
		for (int i = 0; i < N; i++) {
			if(map[cur][i] == 1 && !visited[i]) {
				dfs(i);
			}
		}
	}

}

소스코드 풀이

- DFS를 통해서 노드간 방문체크(visited)

- 방문체크 되어있는 노드를 카운트

Review

플로이드 와샬 유형인 줄 알고 푼 건데 플로이드 와샬 유형이 아니었...

그냥 워밍업 느낌으로 풀었다. 시작 정점이 고정되어 있어서 어렵지 않았던 문제

다른 친구는 DisJoint로 풀었는데 다음주에 개념을 쫙 정리해야 겠다... 다 까먹었다...

 

 

 

'알고리즘CPR' 카테고리의 다른 글

[백준] 11404 플로이드  (0) 2020.08.15
[백준] 14502 연구소  (0) 2020.08.08
[백준] 2178 미로 탐색  (0) 2020.08.08
[백준] 11403 경로 찾기  (0) 2020.08.04
[백준] 6603 로또  (1) 2020.08.02