알고리즘 풀이/프로그래머스

[프로그래머스][JAVA] 배달 (플로이드 와샬)

배게 2022. 3. 27. 08:05
728x90
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import java.util.*;
 
class Solution {
    public int solution(int N, int[][] road, int K) {
        int[][] maps = new int[N+1][N+1];
        for(int i=1; i<=N; i++){
            for(int j=1; j<=N; j++){
                if(i!=j) maps[i][j] = 500001;
            }
        }
        
        for(int i=0; i<road.length; i++){
            int a = road[i][0];
            int b = road[i][1];
            int distance = road[i][2];
            if(distance<maps[a][b]){
                maps[a][b] = distance;
                maps[b][a] = distance;    
            }
            
            
        }
        
        for(int k=1; k<=N; k++){
            for(int i=1; i<=N; i++){
                for(int j=1; j<=N; j++){  
                    if(maps[i][j]>maps[i][k]+maps[k][j]){
                        maps[i][j] = maps[i][k]+maps[k][j];
                    }
                }
            }
        }
        
        int answer = 0;
//         for(int i=0; i<maps.length; i++){
//             for(int j=0; j<maps[0].length; j++){
//                 System.out.print(maps[i][j]+" ");
                   
//             }
//             System.out.println();
//         }
        
        for(int j=1; j<=N; j++){
            if(maps[1][j]<=K){
                answer++;
                // System.out.println(j);
            }
                
        }
        
    
 
        return answer;
    }
}
cs