https://www.acmicpc.net/problem/5567
1. 아이디어
최단거리를 구하는 BFS 알고리즘을 활용하면 간단하게 해결할 수 있다.
2. 문제풀이
동기들의 친구 관계가 주어졌을 때 상근이를 기준으로 친구의 친구까지 찾아야하는 문제이다. 최단거리를 구하는 BFS 알고리즘을 활용해서 거리 2까지 친구들을 찾는 방식으로 구현했다. 동기의 수와 친구 관계가 많이 주어져서 인접리스트를 활용해서 구현했다.
3. 코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
int M = Integer.parseInt(br.readLine());
List<List<Integer>> adj = new ArrayList<>();
for (int i = 0; i <= N; i++) {
adj.add(new ArrayList<>());
}
for (int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
adj.get(a).add(b);
adj.get(b).add(a);
}
int cnt = bfs(N, adj);
System.out.println(cnt);
}
private static int bfs(int N, List<List<Integer>> adj) {
Queue<Integer> q = new LinkedList<>();
q.offer(1);
boolean[] visited = new boolean[1 + N];
visited[1] = true;
int dist = 0;
int cnt = 0;
while (!q.isEmpty()) {
int len = q.size();
for (int i = 0; i < len; i++) {
int node = q.poll();
for (int next : adj.get(node)) {
if (visited[next]) continue;
q.offer(next);
visited[next] = true;
cnt++;
}
}
dist++;
if (dist == 2) break;
}
return cnt;
}
}
4. 후기
'코딩테스트 준비 > 백준' 카테고리의 다른 글
[백준] 2583번 - 영역 구하기 [Java] (0) | 2025.01.21 |
---|---|
[백준] 1012번 - 유기농 배추 [Java] (0) | 2025.01.21 |
[백준] 12869번 - 뮤탈리스크 [Java] (0) | 2025.01.21 |
[백준] 5014번 - 스타트링크 [Java] (0) | 2025.01.20 |
[백준] 1600번 - 말이 되고픈 원숭이 [Java] (1) | 2025.01.20 |