[문제 링크]
https://www.acmicpc.net/problem/1389
[난이도]
- Silver 1
[알고리즘]
- BFS
[코드]
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 = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
List<List<Integer>> graph = new ArrayList<>();
for (int i = 0; i < N + 1; i++) {
graph.add(new ArrayList<>());
}
for (int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine());
int u = Integer.parseInt(st.nextToken());
int v = Integer.parseInt(st.nextToken());
graph.get(u).add(v);
graph.get(v).add(u);
}
int KB[] = new int[N + 1];
for (int i = 1; i < N + 1; i++) {
Queue<Integer> queue = new LinkedList<>();
queue.add(i);
int[] distance = new int[N + 1];
Arrays.fill(distance, -1);
distance[i] = 0;
while (!queue.isEmpty()) {
int current = queue.poll();
for (int next : graph.get(current)) {
if (distance[next] == -1) {
distance[next] = distance[current] + 1;
queue.add(next);
}
}
}
int sum = 0;
for (int j = 1; j < N + 1; j++) {
sum += distance[j];
}
KB[i] = sum;
}
int min = Integer.MAX_VALUE;
int answer = 0;
for (int i = 1; i < N + 1; i++) {
if (KB[i] < min) {
min = KB[i];
answer = i;
}
}
System.out.println(answer);
}
}
[풀이]
이중 list를 선언해 각 정점과 양방향으로 연결된 정점을 초기화해준다.
정점과 연결된 다른 정점과의 거리를 distance 배열에 추가한다. 이 로직을 N번 반복해 각 정점을 기준으로 계산해준다.
Queue<Integer> queue = new LinkedList<>();
queue.add(i);
int[] distance = new int[N + 1];
Arrays.fill(distance, -1);
distance[i] = 0;
while (!queue.isEmpty()) {
int current = queue.poll();
for (int next : graph.get(current)) {
if (distance[next] == -1) {
distance[next] = distance[current] + 1;
queue.add(next);
}
}
}
계산한 케빈베이컨 수중 가장 작은값의 인덱스를 출력해준다.
for (int i = 1; i < N + 1; i++) {
if (KB[i] < min) {
min = KB[i];
answer = i;
}
}
'코딩테스트' 카테고리의 다른 글
백준 13549 : 숨바꼭질 3 [JAVA] (0) | 2024.06.15 |
---|---|
백준 2589 : 보물섬 [JAVA] (0) | 2024.06.15 |
백준 18352 : 특정 거리의 도시 찾기 [JAVA] (1) | 2024.06.13 |
백준 11725 : 트리의 부모 찾기 [JAVA] (1) | 2024.06.13 |
백준 1932 : 정수 삼각형 [JAVA] (0) | 2024.06.12 |