문제
- 컴퓨터 N대에 대해 각각 연결된 컴퓨터 번호가 주어질 때, 1번 컴퓨터가 바이러스에 걸리면 같이 바이러스에 감염되는 컴퓨터 대 수를 구하는 문제.
아이디어
- 그래프로 컴퓨터 연결을 구현하고, DFS 혹은 BFS 탐색을 통해 1번 컴퓨터랑 만 연결된 다른 컴퓨터들(노드들)의 개수를 파악한다.
풀이
import java.io.*;
import java.util.*;
public class Main {
static int N, M;
static boolean[][] graph;
static boolean[] visited;
static int answer = 0;
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
N = Integer.parseInt(br.readLine());
M = Integer.parseInt(br.readLine());
graph = new boolean[N][N];
visited = new boolean[N];
int n1 = 0;
int n2 = 0;
// 그래프 간선 입력
for(int i=0; i<M; i++) {
st = new StringTokenizer(br.readLine());
n1 = Integer.parseInt(st.nextToken()) - 1;
n2 = Integer.parseInt(st.nextToken()) - 1;
graph[n1][n2] = true;
graph[n2][n1] = true;
}
dfs(0);
System.out.println(answer - 1);
}
// 컴퓨터 연결 관계 탐색
static void dfs(int node) {
answer++;
visited[node] = true;
for(int i=0; i<N; i++) {
if(graph[node][i] && !visited[i]) {
dfs(i);
}
}
}
}
채점 결과
문제 링크
'백준' 카테고리의 다른 글
[JAVA] 백준 9375번: 패션왕 신해빈 (0) | 2024.07.28 |
---|---|
[JAVA] 백준 9095번: 1, 2, 3 더하기 (0) | 2024.07.28 |
[JAVA] 백준 2579번: 계단 오르기 (2) | 2024.07.27 |
[JAVA] 백준 1463번: 1로 만들기 (0) | 2024.07.27 |
[JAVA] 백준 1003번: 피보나치 함수 (0) | 2024.07.26 |