코딩 정복 가즈아~
Home
  • 분류 전체보기 (159)
    • 알고리즘 풀이 (149)
      • 프로그래머스 (89)
      • 백준 (59)
    • 취준 일기 (6)
    • 네트워크 정리 (1)
Home
  • 분류 전체보기 (159)
    • 알고리즘 풀이 (149)
      • 프로그래머스 (89)
      • 백준 (59)
    • 취준 일기 (6)
    • 네트워크 정리 (1)
블로그 내 검색

코딩 정복 가즈아~

(っ◔◡◔)っ ♥ 2021 취뽀하자!! ♥

  • 알고리즘 풀이/백준

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

    2021. 8. 2.

    by. 데롱디롱

    728x90

    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

     

     

    이 문제를 풀때, 플로이드 와샬의 개념을 적용하였다.

    모든 정점에서 모든 정점까지의 최단거리

    플로이드 와샬은 모든 정점에서 모든 정점까지의 최단거리를 구하는 것으로
    한 정점에서 모든 정점까지의 거리를 구하는 다익스트라와는 다른 개념이다.

    핵심은 거쳐가는 정점을 기준으로 최단거리를 구해야 한다는 것이다!!

     

     

    - 인접행렬을 만들고,
       자기 자신(road[i][i])은 0, 나머지는 충분히 큰 수로 초기화 시켜준다.
    - 직접 연결된 간선의 가중치를 1로 표시한다.
    - 거쳐가는 노드를 기준으로 최단거리를 구한다.

    road[i][j] = Math.min(road[i][j], road[i][k] + road[k][j]);

    - 최단 거리의 합을 갖는 노드를 찾아 출력한다.

     

     

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.Arrays;
    import java.util.StringTokenizer;
    public class Main {
    static int N, M, road[][];
    public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    StringTokenizer st = new StringTokenizer(br.readLine());
    N = Integer.parseInt(st.nextToken()); // 유저수
    M = Integer.parseInt(st.nextToken()); // 관계 수
    // 초기화
    road = new int[N + 1][N + 1]; // 1번부터 사용하기 위해
    for (int i = 1; i <= N; i++) {
    for (int j = 1; j <= N; j++) {
    if (i == j)
    road[i][j] = 0; // 자기 자신으로 가는 경우
    else
    road[i][j] = 999999; // INF
    }
    }
    // 간선 연결
    for (int i = 0; i < M; i++) {
    st = new StringTokenizer(br.readLine());
    int from = Integer.parseInt(st.nextToken());
    int to = Integer.parseInt(st.nextToken());
    road[from][to] = road[to][from] = 1; // 직접 연결은 가중치 1
    }
    // 플로이드 와샬
    for (int k = 1; k <= N; k++) // 거쳐가는 노드
    for (int i = 1; i <= N; i++) // 시작 노드
    for (int j = 1; j <= N; j++) // 도착 노드
    road[i][j] = Math.min(road[i][j], road[i][k] + road[k][j]);
    // 최소 노드 찾기
    int min_node = Integer.MAX_VALUE;
    int min_road = Integer.MAX_VALUE;
    for (int i = 1; i <= N; i++) {
    int sum = 0;
    for (int j = 1; j <= N; j++)
    sum += road[i][j];
    if (min_road > sum) {
    min_node = i;
    min_road = sum;
    }
    }
    System.out.println(min_node);
    }
    }
    profile
    데롱디롱

    희희.. (๑′ᴗ‵๑)

    저작자표시 (새창열림)

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

    [1541] 백준 - 잃어버린 괄호(JAVA)  (0) 2021.08.02
    [1463] 백준 - 1로 만들기(JAVA)  (0) 2021.08.02
    [1074] 백준 - Z(JAVA)  (0) 2021.07.22
    [17471] 백준 - 게리맨더링(JAVA)  (0) 2021.03.15
    [14891] 백준 - 톱니바퀴(JAVA)  (0) 2021.03.14

    댓글

    관련글

    • [1541] 백준 - 잃어버린 괄호(JAVA) 2021.08.02
    • [1463] 백준 - 1로 만들기(JAVA) 2021.08.02
    • [1074] 백준 - Z(JAVA) 2021.07.22
    • [17471] 백준 - 게리맨더링(JAVA) 2021.03.15
    맨 위로
전체 글 보기
Tistory 로그인
Tistory 로그아웃
로그아웃 글쓰기 관리

Today

Total

피할 수 없다면, 순간을 즐겨라

Designed by Nana
블로그 이미지
데롱디롱
희희.. (๑′ᴗ‵๑)

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.