๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 5972_ํƒ๋ฐฐ ๋ฐฐ์†ก

๋ฟŒ์•ผ._. 2023. 12. 21. 22:29

Gold V

๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/5972)

< ํƒ๋ฐฐ ๋ฐฐ์†ก >

 

๋ฌธ์ œ ํ’€์ด 

 

๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ด์„œ ์ตœ์†Œ ์—ฌ๋ฌผ ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค.

 

 

 my solution (Java)

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

public class _5972_ { // ํƒ๋ฐฐ ๋ฐฐ์†ก

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(bf.readLine());

		int n = Integer.parseInt(st.nextToken());
		int m = Integer.parseInt(st.nextToken());

		ArrayList<ArrayList<int[]>> list = new ArrayList<>();
		for (int i = 0; i <= n; i++) {
			list.add(new ArrayList<>());
		}

		for (int i = 0; i < m; i++) {
			st = new StringTokenizer(bf.readLine());

			int a = Integer.parseInt(st.nextToken());
			int b = Integer.parseInt(st.nextToken());
			int c = Integer.parseInt(st.nextToken());

			list.get(a).add(new int[] { b, c });
			list.get(b).add(new int[] { a, c });
		}

		int result[] = new int[n + 1];
		boolean visited[] = new boolean[n + 1];
		for (int i = 0; i < n + 1; i++) {
			result[i] = Integer.MAX_VALUE;
		}

		visited[1] = true;
		result[0] = 0;

		PriorityQueue<int[]> queue = new PriorityQueue<>(new Comparator<int[]>() {
			@Override
			public int compare(int[] o1, int[] o2) {
				if (o1[1] == o2[1]) {
					return o1[0] - o2[0];
				}
				return o1[1] - o2[1];
			}
		});
		queue.add(new int[] { 1, 0 });

		while (!queue.isEmpty()) {
			int temp[] = queue.poll();
			for (int i = 0; i < list.get(temp[0]).size(); i++) {
				int num[] = list.get(temp[0]).get(i);
				if (!visited[num[0]] || result[num[0]] > temp[1] + num[1]) {
					visited[num[0]] = true;
					result[num[0]] = temp[1] + num[1];
					queue.add(new int[] { num[0], temp[1] + num[1] });
				}
			}
		}
		System.out.println(result[n]);
	}
}
๋ณ€์ˆ˜)
n, m : ํ—›๊ฐ„ ์ˆ˜, ๊ธธ ์ˆ˜
list : ๊ทธ๋ž˜ํ”„
a, b, c : ํ—›๊ฐ„ A, B, ๊ธธ์— ์žˆ๋Š” ์†Œ์˜ ์ˆ˜
result : ์ตœ์†Œ ์—ฌ๋ฌผ ์ˆ˜
visited : ๋ฐฉ๋ฌธ ์—ฌ๋ถ€
queue : ์šฐ์„ ์ˆœ์œ„ ํ (์—ฌ๋ฌผ์˜ ๋น„์šฉ์ด ์ž‘์€ ์ˆœ์„œ๋ฅผ ์šฐ์„ ์ˆœ์œ„๋กœ ๋‘ )

 

ํ—›๊ฐ„ A, B์™€ ๊ธธ์— ์žˆ๋Š” ์†Œ์˜ ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ์–‘๋ฐฉํ–ฅ์œผ๋กœ ์ €์žฅํ•œ๋‹ค. ๊ฐ ํ—›๊ฐ„๋งˆ๋‹ค ์ตœ์†Œ ์—ฌ๋ฌผ ์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด์€ ์ตœ๋Œ“๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค. ํ—›๊ฐ„ 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋ฏ€๋กœ ํ—›๊ฐ„ 1์˜ ๋ฐฉ๋ฌธ ํ‘œ์‹œ๋ฅผ true, ์ตœ์†Œ ์—ฌ๋ฌผ ์ˆ˜๋ฅผ 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค. ์šฐ์„ ์ˆœ์œ„ ํ์—๋Š” [ํ—›๊ฐ„ ๋ฒˆํ˜ธ, ์—ฌ๋ฌผ ๋น„์šฉ]์„ ์ €์žฅํ•˜๋ฉฐ ์—ฌ๋ฌผ ๋น„์šฉ์„ ์šฐ์„ ์ˆœ์œ„๋กœ ๋‘”๋‹ค. 

 

ํ—›๊ฐ„์„ ๋Œ๋ฉด์„œ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ณ , ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜, ํ˜„์žฌ ์—ฌ๋ฌผ๋ณด๋‹ค ๋” ์ ์€ ์—ฌ๋ฌผ์ด๋ผ๋ฉด ๊ทธ ํ—›๊ฐ„์„ ๋ฐฉ๋ฌธํ•œ๋‹ค. 

 

์ตœ์ข… ํ—›๊ฐ„ n์— ๋„์ฐฉํ•˜๋Š”๋ฐ ๊ฐ€์ ธ๊ฐ€์•ผ ๋  ์ตœ์†Œ ์—ฌ๋ฌผ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.



 

'๐ŸŒžAlgorithm > ๐Ÿ”ฅBaekjoon' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Baekjoon] 10282_ํ•ดํ‚น  (0) 2023.12.25
[Baekjoon] 11265_๋๋‚˜์ง€ ์•Š๋Š” ํŒŒํ‹ฐ  (1) 2023.12.22
[Baekjoon] 2660_ํšŒ์žฅ๋ฝ‘๊ธฐ  (0) 2023.12.20
[Baekjoon] 1092_๋ฐฐ  (0) 2023.12.19
[Baekjoon] 17609_ํšŒ๋ฌธ  (0) 2023.12.18