반응형
Notice
Recent Posts
Recent Comments
Link
It's easy, if you try
[백준/boj] 14938: 서강그라운드 (Java) / 플로이드 와샬 본문
반응형
저번에 다익스트라로 풀었던 문제를 플로이드 와샬로 다시 풀어보았다. 아래 링크를 클릭하면 다익스트라 알고리즘 풀이를 확인할 수 있다!
문제
https://www.acmicpc.net/problem/14938
풀이
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
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 r = Integer.parseInt(st.nextToken()); // 길의 개수
int[] items = new int[n+1];
int[][] edges = new int[n+1][n+1];
int MAX_LEN = 16;
st = new StringTokenizer(br.readLine());
for(int i=1; i<= n; i++) {
items[i] = Integer.parseInt(st.nextToken()); // 각 구역에 있는 아이템 수
}
for(int i=1; i<=n; i++) {
for(int j=1; j<=n; j++) {
edges[i][j] = MAX_LEN;
}
}
for(int i=0; i< r; i++) {
st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
int l = Integer.parseInt(st.nextToken()); // 길의 길이
edges[a][b] = l;
edges[b][a] = l;
}
for(int i=1; i<=n; i++) { // 경유지
for(int j=1; j<=n; j++) { // 출발지
for(int k=1; k<=n; k++) { // 도착지
if(i == j || j == k || i == k) continue;
// 기존 j부터 k까지 길의 길이보다 i를 경유해서 가는 길의 길이가 더 작다면 갱신한다.
edges[j][k] = Math.min(edges[j][i] + edges[i][k], edges[j][k]);
}
}
}
int maxNum = 0;
for(int i=1; i<=n; i++) {
int temp = items[i];
for(int j=1; j<=n; j++) {
// i에서 j까지 길의 길이가 수색 범위 이내 일때
if(edges[i][j] <= m) {
temp += items[j];
}
}
maxNum = Math.max(temp, maxNum);
}
System.out.println(maxNum);
}
}
반응형
'알고리즘 > 자바(Java)' 카테고리의 다른 글
[백준/boj] 21611: 마법사 상어와 블리자드 (Java) / 구현 (0) | 2021.06.25 |
---|---|
[백준/boj] 16198: 에너지 모으기 (Java) / DFS / 재귀 / 백트래킹 / 브루트포스 (0) | 2021.06.23 |
[Codility] Lesson4 - FrogRiverOneFind (Java) (0) | 2021.06.18 |
[프로그래머스] 오픈채팅방 (Java) - 2019 KAKAO BLIND RECRUITMENT / 자료구조 (1) | 2021.06.06 |
[프로그래머스] 괄호 변환 - 2020 KAKAO BLIND RECRUITMENT (Java) / 구현 / 스택 (0) | 2021.06.02 |
Comments