[백준] 2606 바이러스 (DFS) - 자바카테고리 없음2024. 1. 9. 12:28
Table of Contents
2606번: 바이러스
첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하인 양의 정수이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍
www.acmicpc.net
import java.io.*;
import java.util.StringTokenizer;
public class Main {
static boolean[][] graph; //그래프의 = 연결 상태를 알려줌
static boolean[] visited; //DFS로 탐색 할 때 이미 방문한 노드를 건너뛰기 위해 기록
static int N, M; // 노드 개수 & 간선 개수
static int count; //바이러스에 걸리는 컴퓨터의 수 = DFS로 접근한 노드의 수
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
N = Integer.parseInt(br.readLine());
M = Integer.parseInt(br.readLine());
graph = new boolean[N + 1][N + 1]; //0번을 사용하지 않고 헷갈리지 않게 1부터 사용
visited = new boolean[N + 1];
int x, y;
for (int i = 0; i < M; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
x = Integer.parseInt(st.nextToken());
y = Integer.parseInt(st.nextToken());
//간선 A-B의 연결은 방향성이 없기 때문에 A to B, B to A 모두 연결 표시
graph[x][y] = true;
graph[y][x] = true;
}
dfs(1); //1번 컴퓨터부터 감염이 시작됨
//1번을 통해 감염된 컴퓨터의 수이기 때문에 1번은 제외
bw.write(String.valueOf(count - 1));
br.close();
bw.close();
}
static void dfs(int idx) {
visited[idx] = true; //DFS가 호출된 idx는 해당 노드는 방문 처리
count++; //접근 카운트 증가
for (int i = 1; i <= N; i++) { //0번을 버리기로 했기 때문에 1~N(포함) 반복
//그래프와 연결된 노드를 찾은 후 방문하지 않았다면
if (visited[i] == false && graph[idx][i]) {
dfs(i); //방문
}
}
}
}
@뽀글뽀글 개발자 :: 뽀글뽀글 개발 일지
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!