본문 바로가기

알고리즘/백준

[백준] 13424 비밀 모임 [JAVA]

문제링크 : www.acmicpc.net/problem/13424

 

13424번: 비밀 모임

입력 데이터는 표준 입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에 테스트 케이스의 개수를 나타내는 자연수 T가 주어진다. 각 테스트 케이스의 첫째 줄에는 방

www.acmicpc.net

플로이드 워셜로 모든 거리정보를 구한 후 모든 거점에 대해서 비용을 모두 구해보고 가장 작은 거리인 거점을 출력한다

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

public class Main {

	public static void main(String[] args) throws Exception{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int tc= Integer.parseInt(br.readLine());
		for(int a=0;a<tc;a++){
			StringTokenizer st = new StringTokenizer(br.readLine());
			int N = Integer.parseInt(st.nextToken());
			int M = Integer.parseInt(st.nextToken());
			int dist[][] = new int[N+1][N+1];
			for(int i=1;i<=N;i++){
				for(int j=1;j<=N;j++){
					if(i==j)dist[i][j] = 0;
					else dist[i][j] = 1000000;
				}
			}
			for(int i=0;i<M;i++){
				st = new StringTokenizer(br.readLine());
				int s = Integer.parseInt(st.nextToken());
				int e = Integer.parseInt(st.nextToken());
				int c = Integer.parseInt(st.nextToken());
				dist[s][e] = c;
				dist[e][s] = c;
			}
			for(int i=1;i<=N;i++){
				for(int j=1;j<=N;j++){
					for(int k=1;k<=N;k++){
						dist[j][k] = Math.min(dist[j][k], dist[j][i] + dist[i][k]);
					}
				}
			}
			int person = Integer.parseInt(br.readLine());
			int personInfo[] = new int[person];
			st = new StringTokenizer(br.readLine());
			for(int i=0;i<person;i++){
				personInfo[i] = Integer.parseInt(st.nextToken());
			}
			int ansLen = 10000000;
			int ans = -1;
			for(int i=1;i<=N;i++){
				int tempLen = 0;
				for(int j=0;j<person;j++){
					tempLen += dist[personInfo[j]][i];
				}
				if(tempLen < ansLen){
					ansLen = tempLen;
					ans = i;
				}
			}
			System.out.println(ans);
		}
	}

}

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

[백준] 2629 양팔저울 [JAVA]  (0) 2021.04.18
[백준] 1948 임계경로  (0) 2021.03.24
[백준] 1248 맞춰봐  (0) 2021.02.24
[백준] 2023 신기한 소수  (0) 2021.02.24
[백준] 2169 로봇 조종하기[JAVA]  (5) 2021.02.24