๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/9694)
< ๋ฌด์์ ์๋๋๊ฐ ์๋๋ผ ๋๊ตฌ๋ฅผ ์๋๋๊ฐ ๋ฌธ์ ๋ค >
๋ฌธ์  ํ์ด
๋ฐ์ดํฌ์คํธ๋ผ๋ฅผ ์ฌ์ฉํด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
my solution (Java)
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
public class _9694_ { // ๋ฌด์์ ์๋๋๊ฐ ์๋๋ผ ๋๊ตฌ๋ฅผ ์๋๋๊ฐ ๋ฌธ์ ๋ค
	static class Node implements Comparable<Node> {
		private int node;
		private int d;
		private ArrayList<Integer> list;
		public Node(int node, int d, ArrayList<Integer> list) {
			this.node = node;
			this.d = d;
			this.list = list;
		}
		@Override
		public int compareTo(Node o) {
			return this.d - o.d;
		}
	}
	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringTokenizer st;
		int t = Integer.parseInt(bf.readLine());
		ArrayList<ArrayList<int[]>> list = new ArrayList<>();
		Node answer[];
		for (int i = 0; i < t; i++) {
			st = new StringTokenizer(bf.readLine());
			int n = Integer.parseInt(st.nextToken());
			int m = Integer.parseInt(st.nextToken());
			answer = new Node[m];
			for (int j = 0; j < m; j++) {
				list.add(new ArrayList<>());
				ArrayList<Integer> temp = new ArrayList<>();
				temp.add(j);
				answer[j] = new Node(j, Integer.MAX_VALUE, temp);
			}
			for (int j = 0; j < n; j++) {
				st = new StringTokenizer(bf.readLine());
				int x = Integer.parseInt(st.nextToken());
				int y = Integer.parseInt(st.nextToken());
				int z = Integer.parseInt(st.nextToken());
				list.get(x).add(new int[] { y, z });
				list.get(y).add(new int[] { x, z });
			}
			PriorityQueue<Node> queue = new PriorityQueue<>();
			ArrayList<Integer> temp = new ArrayList<>();
			temp.add(0);
			answer[0].d = 0;
			queue.add(new Node(0, 0, temp));
			while (!queue.isEmpty()) {
				Node node = queue.poll();
				if (answer[node.node].d < node.d) {
					continue;
				}
				for (int j = 0; j < list.get(node.node).size(); j++) {
					int info[] = list.get(node.node).get(j);
					if (answer[info[0]].d > node.d + info[1]) {
						answer[info[0]].d = node.d + info[1];
						answer[info[0]].list.clear();
						ArrayList<Integer> route = new ArrayList<>();
						for (int k = 0; k < node.list.size(); k++) {
							answer[info[0]].list.add(node.list.get(k));
							route.add(node.list.get(k));
						}
						answer[info[0]].list.add(info[0]);
						route.add(info[0]);
						queue.add(new Node(info[0], node.d + info[1], route));
					}
				}
			}
			bw.write("Case #" + (i + 1) + ": ");
			if (answer[m - 1].d == Integer.MAX_VALUE) {
				bw.write("-1\n");
			} else {
				for (int j = 0; j < answer[m - 1].list.size(); j++) {
					bw.write(answer[m - 1].list.get(j) + " ");
				}
				bw.write("\n");
			}
			list.clear();
		}
		bw.flush();
	}
}๋ณ์)
Node : ๋ฒํธ, ์น๋ฐ๋, ๋ง๋ ์์
t : ํ ์คํธ์ผ์ด์ค ์
list : ์ ์น์ธ๋ค ๊ฐ์ ์น๋ฐ๋ ๊ด๊ณ
answer : 0๋ฒ์์ ๊ฐ ์ ์น์ธ๊น์ง ์น๋ฐ๋
n, m : ๊ด๊ณ์ ๊ฐ์, ์ ์น์ธ์ ์
x, y, z : ์ ์น์ธ x, ๊ทธ์ ์น๊ตฌ y, ๋ ์ฌ๋ ๊ฐ์ ์น๋ฐ๋
queue : Node๋ฅผ ๊ฐ์ง ์ฐ์ ์์ ํ (์น๋ฐ๋๊ฐ ๋ฎ์ ๊ฒ์ ์ฐ์ ์์๋ก ๊ฐ์ง)
Node
์ ์น์ธ์ ๋ฒํธ, ์น๋ฐ๋, ๋ง๋ ์์๋ฅผ ๋ณ์๋ก ๊ฐ์ง. ์ฐ์ ์์๋ ์น๋ฐ๋๊ฐ ๋ฎ์ ๊ฒ์ ์ฐ์ ์ผ๋ก ํจ
Main
ํ ์คํธ์ผ์ด์ค ์๋งํผ 0๋ฒ์์ m-1๋ฒ๊น์ง ๋ฎ์ ์น๋ฐ๋๋ฅผ ๊ฐ์ง ์ ์๋ ๋ง๋ ์์๋ฅผ ๊ตฌํ๋ค.
์ ์น์ธ๋ค ๊ฐ์ ๊ด๊ณ๋ฅผ ์ ๋ ฅ๋ฐ์ list์ ์๋ฐฉํฅ์ผ๋ก ์ ์ฅํ๋ค.
์ฐ์ ์์ ํ์ 0๋ฒ์ ๋ฃ์ด ์น๋ฐ๋๋ฅผ ๊ตฌํ๋ค. ์ฐ์ ์์ ํ๊ฐ ๋น ๋๊น์ง ๋ฐ๋ณตํ๋ค. ์ฐ์ ์์ ํ์์ ๊ฐ์ ๊บผ๋ด ์์ ๊ณผ ์ฐ๊ฒฐ๋ ๋ค๋ฅธ ์ ์น์ธ๋ค์ ์ดํด๋ณด๋ฉฐ ์น๋ฐ๋์ ํฉ์ด ํ์ฌ ์ ์ฅ๋ ์น๋ฐ๋๋ณด๋ค ์์ ๊ฐ์ด๋ผ๋ฉด ๊ฐ์ ์ ๋ฐ์ดํธํ๋ฉฐ ์ฐ์ ์์ ํ์ ์ ์ฅํ๋ค.
answer์ m-1๋ฒ์งธ ์น๋ฐ๋ ๊ฐ์ด Integer.MAX_VALUE๋ผ๋ฉด ์ต๊ณ ์์์ ๋ง๋ ์ ์๋ค๋ ๋ป์ด๋ฏ๋ก -1์ ์ถ๋ ฅํ๊ณ Integer.MAX_VALUE๊ฐ ์๋๋ผ๋ฉด answer์ m-1๋ฒ์งธ์ ์ ์ฅ๋ list์ ๊ฐ์ ์ถ๋ ฅํ๋ค.

'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Baekjoon] 10384_ํฌ๊ทธ๋จ (0) | 2024.01.15 | 
|---|---|
| [Baekjoon] 1865_์ํ (0) | 2024.01.12 | 
| [Baekjoon] 1719_ํ๋ฐฐ (0) | 2024.01.10 | 
| [Baekjoon] 11779_์ต์๋น์ฉ ๊ตฌํ๊ธฐ 2 (0) | 2024.01.09 | 
| [Baekjoon] 1238_ํํฐ (2) | 2024.01.08 |