코딩테스트/백준

[백준] 1389 : 케빈 베이컨의 6단계 법칙 - JAVA

ankisile 2023. 11. 3. 03:24

문제

https://www.acmicpc.net/problem/1389

 

1389번: 케빈 베이컨의 6단계 법칙

첫째 줄에 유저의 수 N (2 ≤ N ≤ 100)과 친구 관계의 수 M (1 ≤ M ≤ 5,000)이 주어진다. 둘째 줄부터 M개의 줄에는 친구 관계가 주어진다. 친구 관계는 A와 B로 이루어져 있으며, A와 B가 친구라는 뜻

www.acmicpc.net

 

코드

import java.io.*;
import java.util.*;

class Main {	
	static ArrayList<Integer> graph[];
	static int n, m;
	public static void main(String args[]) throws Exception{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));		
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		n = Integer.parseInt(st.nextToken());
		m = Integer.parseInt(st.nextToken());
		
		graph = new ArrayList [n+1];
		
		for(int i=0;i<=n;i++) {
			graph[i] = 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());
			
			graph[a].add(b);
			graph[b].add(a);
		}
		
		int answer = 0;
		int min = Integer.MAX_VALUE;
		
		for(int i=1;i<=n;i++) {
			if(min > bfs(i)) {
				min = bfs(i);
				answer = i;
			}
		}
		
		System.out.println(answer);
		
	}
	
	static public int bfs(int start) {
		Queue<Integer> que = new LinkedList<>();
		int visited[] = new int [n+1];
		Arrays.fill(visited, -1);
		int count = 0;
		
		que.add(start);
		visited[start] = 0;
		while(!que.isEmpty()) {
			int cur = que.poll();
			
			for(int next : graph[cur]) {
				if(visited[next] == -1 ) {
					visited[next] = visited[cur]+1;
					que.add(next);
				}
			}
		}
		
		for(int i=1;i<=n;i++) {
			count += visited[i];
		}
		
		return count;
		
		
	}
	
}