๋ฌธ์ (์ถ์ฒ: 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 |