๊ธฐ๋ก๋ฐฉ

BOJ_1916 : ์ตœ์†Œ๋น„์šฉ ๊ตฌํ•˜๊ธฐ ๋ณธ๋ฌธ

CodingTest/Java

BOJ_1916 : ์ตœ์†Œ๋น„์šฉ ๊ตฌํ•˜๊ธฐ

Soom_1n 2023. 3. 8. 22:43

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ

 

1916๋ฒˆ: ์ตœ์†Œ๋น„์šฉ ๊ตฌํ•˜๊ธฐ

์ฒซ์งธ ์ค„์— ๋„์‹œ์˜ ๊ฐœ์ˆ˜ N(1 ≤ N ≤ 1,000)์ด ์ฃผ์–ด์ง€๊ณ  ๋‘˜์งธ ์ค„์—๋Š” ๋ฒ„์Šค์˜ ๊ฐœ์ˆ˜ M(1 ≤ M ≤ 100,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์…‹์งธ ์ค„๋ถ€ํ„ฐ M+2์ค„๊นŒ์ง€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฒ„์Šค์˜ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋จผ์ € ์ฒ˜์Œ์—๋Š” ๊ทธ

www.acmicpc.net



๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

  • N๊ฐœ์˜ ๋„์‹œ๊ฐ€ ์žˆ๊ณ , M๊ฐœ์˜ ๋ฒ„์Šค๊ฐ€ ์žˆ๋‹ค.
    • M๊ฐœ์˜ ๋ฒ„์Šค๋Š” ํ•œ ๋„์‹œ์—์„œ ๋‹ค๋ฅธ ๋„์‹œ๊นŒ์ง€ ๋“œ๋Š” ๋ฒ„์Šค ๋น„์šฉ์ด ์žˆ๋‹ค. 
    • ์ถœ๋ฐœ ๋„์‹œ๋ถ€ํ„ฐ ๋„์ฐฉ์ง€ ๋„์‹œ๊นŒ์ง€ ๋ฒ„์Šค ๋น„์šฉ์˜ ์ตœ์†Œ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.
  • ์ „ํ˜•์ ์ธ ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ์ด๋‹ค.
    • ๊ทธ๋ž˜ํ”„์—์„œ ํ•œ ์ •์ ์—์„œ ํŠน์ • ์ •์ ๊นŒ์ง€์˜ ์ตœ์†Œ๋น„์šฉ์„ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค.
    • M๊ฐœ์˜ ๋ฒ„์Šค๋Š” ๋‹จ๋ฐฉํ–ฅ ์—ฐ๊ฒฐ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
    • ๋ชฉ์ ์ง€๊ฐ€ ๋‚˜์˜ฌ ๋•Œ ๊นŒ์ง€, ๊ฐ ์ •์ ์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐฑ์‹ ํ•ด๊ฐ„๋‹ค.
    • ๋ชฉ์ ์ง€์— ๋ฐฉ๋ฌธํ•˜๋ฉด ๊ทธ๋•Œ์˜ ๋น„์šฉ์„ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ”ธ ์ฝ”๋“œ ๐Ÿ”ธ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.PriorityQueue;
import java.util.StringTokenizer;

public class Main {
    private static class City implements Comparable<City> {
        int num;
        long weight;

        public City(int num, long weight) {
            this.num = num;
            this.weight = weight;
        }

        @Override
        public int compareTo(City o) {
            return Long.compare(this.weight, o.weight);
        }
    }

    public static void main(String[] args) throws IOException {
        // Input
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        int M = Integer.parseInt(br.readLine());
        boolean[] visited = new boolean[N+1];
        ArrayList<City>[] adjList = new ArrayList[N+1];
        for (int i = 0; i <= N; i++) {
            adjList[i] = new ArrayList<>();
        }

        StringTokenizer st = null;
        for (int i = 0; i < M; i++) {
            st = new StringTokenizer(br.readLine());
            adjList[Integer.parseInt(st.nextToken())].add(new City(Integer.parseInt(st.nextToken()), (long)Integer.parseInt(st.nextToken())));
        }

        // Dijkstra

        PriorityQueue<City> pq = new PriorityQueue<>();
        st = new StringTokenizer(br.readLine());
        pq.add(new City(Integer.parseInt(st.nextToken()),0));

        int end = Integer.parseInt(st.nextToken());
        int cur;
        long min = 0;
        while (!pq.isEmpty()){

            City city = pq.poll();
            cur = city.num;
            min = city.weight;

            if (cur == end) break;

            visited[cur] = true;

            for (City adjCity : adjList[cur]) {
                if (!visited[adjCity.num]) {
                    pq.add(new City(adjCity.num, min+ adjCity.weight));
                }
            }
        }
        System.out.println(min);
    }
}

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • ๋„์‹œ ๋ฒˆํ˜ธ์™€ ๋น„์šฉ์„ ๊ฐ–๊ณ  ์žˆ๋Š” City ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ ๋‹ค.
  • ๋ฐฉ๋ฌธ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด boolean ๋ฐฐ์—ด visited๋ฅผ ๋งŒ๋“ค์–ด ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ณ„์‚ฐ ๋œ ๋„์‹œ๋“ค์„ ์ฒดํฌํ•œ๋‹ค.
  • ArrayList<City>๋ฐฐ์—ด adjList๋กœ M๊ฐœ์˜ ๋ฒ„์Šค ์ •๋ณด๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
  • Dijkstra ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ด ์ตœ์†Œ๋น„์šฉ์„ ๊ตฌํ•œ๋‹ค.
    • PriorityQueue๋กœ ์‹œ์ž‘ ์ •์ ์œผ๋กœ๋ถ€ํ„ฐ ์ตœ์†Œ ๋น„์šฉ์˜ ์ •์ ๋“ค์„ ์ฐจ๋ก€๋กœ ํ™•์ธํ•˜๊ณ  ๋ฐฉ๋ฌธ์ฒดํฌํ•œ๋‹ค.
    • ๋ฐฉ๋ฌธํ•œ ์ •์ ์ด ๋ชฉ์ ์ง€๋ฉด ์ข…๋ฃŒํ•˜๊ณ  ๋น„์šฉ์„ ์ถœ๋ ฅํ•œ๋‹ค.
    • ๋ฐฉ๋ฌธํ•œ ์ •์ ์ด ๋ชฉ์ ์ง€๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด, ์ธ์ ‘ํ•œ ์ •์ ๋“ค์˜ ๊ฑฐ๋ฆฌ+ํ˜„์žฌ ์ •์ ๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ๋ฅผ pq์— ์ถ”๊ฐ€ํ•œ๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • ๋‹ค์ต์ŠคํŠธ๋ผ๋ฅผ ๊ณต๋ถ€ํ•˜๊ณ  ์ฒ˜์Œ์œผ๋กœ ์ง์ ‘ ๊ตฌํ˜„ํ•ด๋ดค๋Š”๋ฐ, ์›๋ฆฌ๋ฅผ ์žŠ์ง€์•Š๋Š”๊ฒŒ ์ค‘์š”ํ•œ ๊ฒƒ ๊ฐ™๋‹ค.

728x90

'CodingTest > Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

BOJ_9019 : DSLR  (0) 2023.03.21
BOJ_14502 : ์—ฐ๊ตฌ์†Œ  (0) 2023.03.08
BOJ_1717 : ์ง‘ํ•ฉ์˜ ํ‘œํ˜„  (0) 2023.03.08
BOJ_1926 : ๊ทธ๋ฆผ  (0) 2023.03.05
BOJ_3109 : ๋นต์ง‘  (0) 2023.02.22