Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
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
Archives
Today
Total
관리 메뉴

csct3434

[level 2] 배달 - 12978 본문

프로그래머스

[level 2] 배달 - 12978

csct3434 2024. 2. 28. 19:57

문제 링크

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

class Solution {

    public int solution(int N, int[][] road, int K) {
       List<List<int[]>> graph = new ArrayList<>();
       int[] distance = new int[N + 1];

       init(graph, distance, road, N);

       PriorityQueue<int[]> pq = new PriorityQueue<>(Comparator.comparingInt(a -> a[1]));
       pq.add(new int[]{1, 0});
       while (!pq.isEmpty()) {
          int[] curr = pq.poll();
          int currNode = curr[0];
          int currDistance = curr[1];

          for (int[] edge : graph.get(currNode)) {
             int nextNode = edge[0];
             int nextDistance = currDistance + edge[1];

             if (nextDistance < distance[nextNode]) {
                distance[nextNode] = nextDistance;
                pq.add(new int[]{nextNode, nextDistance});
             }
          }
       }

       return (int) Arrays.stream(distance)
          .filter(dist -> dist <= K)
          .count();
    }

    private void init(List<List<int[]>> graph, int[] distance, int[][] road, int N) {
       for (int i = 0; i < N + 1; i++) {
          graph.add(new ArrayList<>());
       }
       for (int i = 0; i < road.length; i++) {
          int from = road[i][0];
          int to = road[i][1];
          int dist = road[i][2];
          graph.get(from).add(new int[]{to, dist});
          graph.get(to).add(new int[]{from, dist});
       }
        
       for (int i = 0; i < N + 1; i++) {
          distance[i] = Integer.MAX_VALUE;
       }
       distance[1] = 0;
    }
}