-
[BOJ - Gold IV] 운동 / ⭕Algorithm/BOJ 2024. 8. 19. 14:34
1. 제출 코드 (24분 00초 / 플로이드 워셜)
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 V = Integer.parseInt(st.nextToken()); int E = Integer.parseInt(st.nextToken()); int[][] dist = new int[V + 1][V + 1]; int INF = 100000000; for(int i = 1; i <= V; i++) { for(int j = 1; j <= V; j++) { dist[i][j] = INF; } } for(int i = 0; i < E; i++) { st = new StringTokenizer(br.readLine()); dist[Integer.parseInt(st.nextToken())][Integer.parseInt(st.nextToken())] = Integer.parseInt(st.nextToken()); } for(int k = 1; k <= V; k++) { for(int i = 1; i <= V; i++) { for(int j = 1; j <= V; j++) { dist[i][j] = Math.min(dist[i][j], dist[i][k] + dist[k][j]); } } } int ans = INF; for(int i = 1; i <= V; i++) { ans = Math.min(ans, dist[i][i]); } System.out.println(ans == INF ? -1 : ans); } }
2. 구현 로직
모든 노드간의 최단 경로를 탐색해야 하고 간선에 가중치가 있는 그래프에서 최소 경로를 찾기 위해 플로이드 워셜을 이용했다.
- 가중치 테이블 INF로 초기화
- 마을 이동간의 가중치를 입력받아 초기화
- i에서 j 마을로 갈 때 k를 거쳐서 가는 최소 가중치 구함
- 출발한 마을로 다시 돌아와야 하므로 dist[i][i]의 최솟값을 구하여 출력
3. 유의할 점
- 가중치 테이블을 초기화할 때, INF를 MAX_VALUE로 두면 오버플로우가 나는 문제점을 조심해야 한다.
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ - Silver II] 생태학 / ⭕ (0) 2024.08.19 [BOJ - Gold IV] 녹색 옷 입은 애가 젤다지? / ⭕ (0) 2024.08.19 [BOJ - Gold IV] 곡예 비행 / ⭕ (0) 2024.08.18 [BOJ - Gold V] 토마토 / ⭕ (0) 2024.08.17 [BOJ - Silver V] 무한 문자열 / ⭕ (0) 2024.08.17