ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준]5972: 택배 배송 - JAVA
    문제풀이/백준 2021. 5. 24. 10:53

    [백준]5972: 택배 배송

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

     

    5972번: 택배 배송

    농부 현서는 농부 찬홍이에게 택배를 배달해줘야 합니다. 그리고 지금, 갈 준비를 하고 있습니다. 평화롭게 가려면 가는 길에 만나는 모든 소들에게 맛있는 여물을 줘야 합니다. 물론 현서는

    www.acmicpc.net

    풀이

    출발지 헛간에서 목적지 헛간으로 가는 최소 거리를 찾는 문제로 다익스트라 알고리즘을 활용하여 풀었다. 다익스트라를 사용하여 출발지에서 다른 모든 헛간으로 가는 최소 거기를 찾아준 다음, 목적지까지의 거리를 반환해 주었다.

     

    헛간 사이에는 방향성이 없으므로 헛간간의 거리를 입력받을때, 입력받는 두 개의 헛간에 모두 정보를 입력해 주었다. 또한 dist의 default값은 입력 받을 수 있는 경로 개수의 최대값(50000)과 한 번에 입력 가능한 cost의 최대값(1000)을 곱한 수를 최소로 하는 50000001으로 설정해 주었다.

     

    그리고 다익스트라 알고리즘을 쓰면 답이 나옹당. 

    코드

    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    import java.util.*;
     
    public class Main {
        
        static int n, m;
        static int[] dist;
        static ArrayList<Node>[] list;
        static boolean[] visited;
     
        public static void main(String[] args) {
            Scanner scan = new Scanner(System.in);
     
            n = scan.nextInt();
            m = scan.nextInt();
     
            list = new ArrayList[n + 1];
            for(int i = 1; i <= n; i++) {
                list[i] = new ArrayList<>();
            }
            
            for(int i = 0; i < m; i++) {
                int s = scan.nextInt();
                int e = scan.nextInt();
                int cost = scan.nextInt();
                list[s].add(new Node(e, cost));
                list[e].add(new Node(s, cost));
            }
     
            visited = new boolean[n + 1];
            dist = new int[n + 1];
            Arrays.fill(dist, 50000001); //50000 * 1000 + 1
            dijkstra();
            System.out.println(dist[n]); //목적지는 n
        }
     
        public static void dijkstra() {
            PriorityQueue<Node> q = new PriorityQueue<>();
            dist[1= 0//시작 지점은 1
            q.offer(new Node(10));
     
            while(!q.isEmpty()) {
                Node current = q.poll();
     
                if(!visited[current.d]) visited[current.d] = true;
                else continue;
     
                for(int i = 0; i < list[current.d].size(); i++) {
                    Node next = list[current.d].get(i);
                    if(dist[next.d] > dist[current.d] + next.cost) {
                        dist[next.d] = dist[current.d] + next.cost;
                        q.offer(new Node(next.d, dist[next.d]));
                    }
                }
            }
        }
     
        public static class Node implements Comparable<Node> {
            int d;
            int cost;
     
            public Node(int d, int cost) {
                this.d = d;
                this.cost = cost;
            }
     
            @Override
            public int compareTo(Node n) {
                return this.cost - n.cost;
            }
        }
    }
     
    cs

    '문제풀이 > 백준' 카테고리의 다른 글

    [백준]17417: 게리맨더링 - JAVA  (0) 2021.05.26
    [백준]1516: 게임 개발 - JAVA  (0) 2021.05.25
    [백준]14719: 빗물 - JAVA  (0) 2021.05.21
    [백준]16174: 점프왕 쩰리 - JAVA  (0) 2021.05.20
    [백준]1013: Contact - JAVA  (0) 2021.05.19

    댓글

Designed by Tistory.