5567번: 결혼식
예제 1의 경우 2와 3은 상근이의 친구이다. 또, 3과 4는 친구이기 때문에, 4는 상근이의 친구의 친구이다. 5와 6은 친구도 아니고, 친구의 친구도 아니다. 따라서 2, 3, 4 3명의 친구를 결혼식에 초대
www.acmicpc.net
코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Queue;
import java.util.Set;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
// 상근이의 동기의 수
int n = Integer.parseInt(br.readLine());
// 리스트의 길이
int m = Integer.parseInt(br.readLine());
Set<Integer>[] graph = new Set[n + 1];
for (int i = 1; i <= n; i++) {
graph[i] = new HashSet<>();
}
for (int i = 0; i < m; i++) {
st = new StringTokenizer(br.readLine());
// 친구 관계 (a와 b가 친구관계, b와 a도 친구관계)
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
graph[a].add(b);
graph[b].add(a);
}
int[] dist = new int[n + 1];
Arrays.fill(dist, 987654321);
dist[1] = 0;
boolean[] visited = new boolean[n + 1];
visited[1] = true;
Queue<Integer> q = new ArrayDeque<>();
q.offer(1);
while (!q.isEmpty()) {
int cur = q.poll();
for (int next : graph[cur]) {
if (!visited[next]) {
dist[next] = dist[cur] + 1;
visited[next] = true;
q.offer(next);
}
}
}
int answer = 0;
for (int j = 2; j <= n; j++) {
if (dist[j] <= 2) answer++;
}
System.out.println(answer);
}
}
728x90