https://www.acmicpc.net/problem/2606
public class Main {
static boolean[] check;
static boolean[][] computers;
static int numberOfComputers, pair, count;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
numberOfComputers = Integer.parseInt(br.readLine());
pair = Integer.parseInt(br.readLine());
check = new boolean[numberOfComputers+1];
computers = new boolean[numberOfComputers + 1][numberOfComputers + 1];
for (int i = 0; i < pair; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
computers[a][b] = computers[b][a] = true;
}
count = 0;
dfs(1);
System.out.println(count);
}
private static void dfs(int start) {
check[start] = true;
for (int i = 1; i <= numberOfComputers; i++) {
if (computers[start][i] && !check[i]) {
count++;
dfs(i);
}
}
}
}
1260번 dfs와 bfs문제를 풀었던 것을 참고해서 간단하게 풀 수 있었다. 주제별로 10문제 정도는 풀어야 기본적인 틀을 안보고 작성할 수 있을 것 같다.