ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 1389번 - 케빈 베이컨의 6단계 법칙
    알고리즘/백준 2023. 6. 9. 18:17
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.StringTokenizer;
    
    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());
    		int[][] dist = new int[N][N];
    		for(int i=0;i<N;i++) {
    			for(int j=0;j<N;j++) {
    				dist[i][j] = 10000;
    			}
    		}
    		int A, B;
    		for(int i=0;i<M;i++) {
    			st = new StringTokenizer(br.readLine());
    			A = Integer.parseInt(st.nextToken())-1;
    			B = Integer.parseInt(st.nextToken())-1;
    			dist[A][B] = 1;
    			dist[B][A] = 1;
    		}
    		for(int k=0;k<N;k++) {
    			for(int i=0;i<N;i++) {
    				for(int j=0;j<N;j++) {
    					if(i != j) {
    						dist[i][j] = Math.min(dist[i][j], dist[i][k] + dist[k][j]);
    					}
    				}
    			}
    		}
    		int min = Integer.MAX_VALUE;
    		int tmp;
    		int result = 0;
    		for(int i=0;i<N;i++) {
    			tmp = 0;
    			for(int j=0;j<N;j++) {
    				if(i != j) {
    					tmp += dist[i][j];
    				}
    			}
    			if(tmp < min) {
    				min = tmp;
    				result = i+1;
    			}
    		}
    		System.out.println(result);
    		br.close();
    	}
    }

    플로이드-워셜 알고리즘을 이용하면 모든 사람의 케빈 베이컨 수를 각각 구할 수 있습니다.

     

    가장 처음 사람 수에 맞게 dist배열을 이차원으로 선언하고

    M개의 연결 관계에 따라 관계가 있을 경우 거리를 1로 표시합니다.

     

    이후 k명의 사람에 대해 i에서 j까지의 거리보다 i에서 k까지의 거리에 k에서 j까지의 거리를 더한 것이 더 작은 지의 여부를 따지면 플로이드-워셜 알고리즘이 적용됩니다.

     

    이 경우 자기 자신까지의 거리를 제외한 모든 거리의 합이 케빈 베이컨 수가 됩니다. min값을 계속 갱신하면서 갱신될 경우 해당 사람이 몇 번인지를 기록해주고 마지막에 출력해주면 끝나게 됩니다.

     

    이 경우 공간을 아끼기 위해 인덱스를 0부터 사용하고 A와 B를 받을 때 1씩 빼주고 마지막에 결과를 출력할 때 1을 더해줬습니다.

    '알고리즘 > 백준' 카테고리의 다른 글

    1764번 - 듣보잡  (0) 2023.06.10
    1620번 - 나는야 포켓몬 마스터 이다솜  (0) 2023.06.10
    1107번 - 리모콘  (0) 2023.06.08
    1012번 - 유기농 배추  (0) 2023.06.06
    1003번 - 피보나치 함수  (0) 2023.06.06
Designed by Tistory.