BOJ_14938_서강그라운드_java

2023. 1. 9. 20:40Algorithm/BOJ

728x90

https://www.acmicpc.net/problem/14938

 

14938번: 서강그라운드

예은이는 요즘 가장 인기가 있는 게임 서강그라운드를 즐기고 있다. 서강그라운드는 여러 지역중 하나의 지역에 낙하산을 타고 낙하하여, 그 지역에 떨어져 있는 아이템들을 이용해 서바이벌을

www.acmicpc.net

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.StringTokenizer;

/**
 백준 14938 서강그라운드
 골드 4
 */
public class BOJ_14938_서강그라운드 {
    final static int max = 123456789;
    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 r = Integer.parseInt(st.nextToken()); // 길의 개수

        int item[] = new int[n+1]; // 각 지역의 아이템 수

        int[][] roads = new int[n+1][n+1];
        for (int i = 1; i<n+1; i++){
            for (int j = 1; j<n+1; j++){
                roads[i][j] = max;
            }
        }

        st = new StringTokenizer(br.readLine());
        for (int i = 1; i<=n; i++){
            item[i] = Integer.parseInt(st.nextToken());
        }
        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());
            roads[a][b] = l;
            roads[b][a] = l;
        }
        //플로이드 와샬
        for (int i = 1; i<n+1; i++){ // 경유지
            for (int j = 1; j<n+1; j++){ //출발지
                for (int k = 1; k<n+1; k++){ // 도착지
                    if(i == j || j ==k || i == k) continue;
                    roads[j][k] = Math.min(roads[j][k], roads[j][i] + roads[i][k]);
                }
            }
        }

        int ans = 0;
        for (int i = 1; i<n+1; i++){ // 출발지 i일때 최대 값 구하기
            int tmp = item[i];
            for (int j = 1; j<n+1; j++){
                if (roads[i][j] <= m){
                    tmp += item[j];
                }
                ans = Math.max(ans, tmp);
            }
        }
        System.out.println(ans);
    }
}

'Algorithm > BOJ' 카테고리의 다른 글

BOJ_2166_다각형의면적_java  (0) 2023.01.11
BOJ_12852_1로 만들기 2_java  (0) 2023.01.10
BOJ_13172_Σ_java  (0) 2023.01.06
BOJ_2448_별 찍기 11_java  (0) 2022.12.28
BOJ_1406_에디터_java  (0) 2022.12.27