Tags
- BFS
- queue
- ์ ๋ ฌ
- ์๋ฎฌ๋ ์ด์
- LV2
- ๋๋น ์ฐ์ ํ์
- DP
- ์ ์๋ก
- sort
- ๊ตฌํ
- ๊ทธ๋ํ ์ด๋ก
- Python
- ์๋ฃ๊ตฌ์กฐ
- ๋ฌธ์์ด
- ๋ฐฑํธ๋ํน
- ๊ต์ฌ
- PGM
- stack
- Brute Force Algorithm
- dfs
- ๊ทธ๋ํ ํ์
- Java
- ๊น์ด ์ฐ์ ํ์
- greedy
- CodingTest
- Study
- SpringBoot
- Dynamic Programming
- BOJ
- ์ํ
Archives
๊ธฐ๋ก๋ฐฉ
BOJ_1753 : ์ต๋จ๊ฒฝ๋ก ๋ณธ๋ฌธ
๐ธ ๋ฌธ์ ๋ถ์ ๐ธ
- ๊ฐ์ค์น๊ฐ ์๋ ๋ฐฉํฅ ๊ทธ๋ํ์์ ์์ ๋
ธ๋๋ถํฐ ๋ค๋ฅธ ๋ชจ๋ ๋
ธ๋๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ค.
- ์ ์ ์ ์ V, ๊ฐ์ ์ ์ E. ์์ ๋ ธ๋ K์ ์ฐ๊ฒฐ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋ค.
- ๊ฐ์ค์น๋ 10 ์ดํ์ ์์ฐ์์ด๋ค.
- ๋ค์ต์คํธ๋ผ์ ๋ฐ๋ณต์ด๋ ํ๋ฆผ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ํ์ดํ ์ ์๋ค.
- ์์ ๋
ธ๋์์ ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋
ธ๋ ์ค ์ต์ ๊ฐ์ค์น ๊ฐ์ ์ ์ ํํด ํ์ํ๋ค.
(๊ฐ ์ ์๋ ๊ฐ์ ์ค ์ต์ ๊ฐ์ ์ ํํ๋ฉด ์ต๋จ๊ฑฐ๋ฆฌ๊ฐ ๋ณด์ฅ๋๋ค) - ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ๋ ธ๋์ ์ต๋จ๊ฑฐ๋ฆฌ๋ ๋ฌดํ๋(INF)์ด์ง๋ง, -1๋ก ํ์ํ๋ค.
- ์์ ๋
ธ๋์์ ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋
ธ๋ ์ค ์ต์ ๊ฐ์ค์น ๊ฐ์ ์ ์ ํํด ํ์ํ๋ค.
๐ธ ์ฝ๋ ๐ธ
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
public class Main {
private static class Edge implements Comparable<Edge> {
int node;
int weight;
public Edge(int node, int weight) {
this.node = node;
this.weight = weight;
}
@Override
public int compareTo(Edge o) {
return this.weight - o.weight;
}
}
public static void main(String[] args) throws IOException {
// Input
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
StringTokenizer st = new StringTokenizer(br.readLine());
int V = Integer.parseInt(st.nextToken());
int E = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(br.readLine());
ArrayList<Edge>[] adjlist = new ArrayList[V + 1];
for (int i = 1; i <= V; i++) {
adjlist[i] = new ArrayList<>();
}
for (int i = 0; i < E; i++) {
st = new StringTokenizer(br.readLine());
adjlist[Integer.parseInt(st.nextToken())].add(new Edge(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken())));
}
// Prim
int[] d = new int[V + 1];
Arrays.fill(d, -1);
PriorityQueue<Edge> pq = new PriorityQueue<>();
pq.add(new Edge(K, 0));
while (!pq.isEmpty()) {
Edge now = pq.poll();
if (d[now.node] >= 0) continue;
d[now.node] = now.weight;
for (Edge e : adjlist[now.node]) {
if (d[e.node] == -1) {
pq.add(new Edge(e.node, e.weight + now.weight));
}
}
}
// Output
for (int i = 1; i <= V; i++) {
if (d[i] == -1) sb.append("INF");
else sb.append(d[i]);
sb.append('\n');
}
bw.write(sb.toString());
bw.flush();
}
}
๐ธ ์ฝ๋ ํด์ ๐ธ
- ๊ฐ์ ์ ๋ณด์์ ์ฐ๊ฒฐ ๋
ธ๋์ ๊ฐ์ค์น๋ฅผ ํจ๊ป ์ ์ฅํ๊ธฐ ์ํด ํด๋์ค Edge๋ฅผ ์ ์ธํ๋ค.
- ๋ชฉ์ ์ง ๋ ธ๋๋ node, ๊ฐ์ค์น๋ weight๋ก ์ ์ฅํ๋ค.
- ์ฐ์ ์์ ํ์ ์ฌ์ฉ๋๋ฏ๋ก Comparable ์ธํฐํ์ด์ค๋ฅผ ์์ํ๊ณ , compareTo ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ํด์ ๋์ ๋น๊ต๊ธฐ์ค์ weight๋ก ์ค์ ํ๋ค.
- ๋ ธ๋ ์, ๊ฐ์ ์, ์์ ๋ ธ๋, ๊ฐ์ ์ ๋ณด๋ฅผ ์ ๋ ฅ๋ฐ๋๋ค.
- ๊ฐ ๋ ธ๋์ ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ฅํ intํ ๋ฐฐ์ด d๋ฅผ ์ ์ธํ๊ณ -1๋ก ์ด๊ธฐํํ๋ค.
- ์ฐ์ ์์ ํ์ ์์ ๋ ธ๋ K๋ฅผ ๋ฃ๊ณ , ๊ฐ์ค์น๋ 0์ผ๋ก ์์ํ๋ค.
- ํ๊ฐ ๋น ๋๊น์ง ๊ณ์ฐ์ ๋ฐ๋ณตํ๋ค.
- ํ์์ Edge ๊ฐ์ฒด๋ฅผ ํ๋ ๊บผ๋ธ๋ค.
- ์ด๋ฏธ ๋ฐฉ๋ฌธํ์ผ๋ฉด (๊ฐ์ค์น๊ฐ -1์ด ์๋๋ฉด) ๋ค์ ๋ฝ๋๋ค.
- ์์ง ๋ฐฉ๋ฌธํ์ง ์์์ผ๋ฉด, ํ์ฌ ๊ฐ์ค์น๊ฐ ์ต๋จ๊ฑฐ๋ฆฌ์ด๋ฏ๋ก ๋ฐฐ์ด d์ ์ ์ฅํ๋ค.
- ์ธ์ ํ ๋ ธ๋ ์ค ์์ง ๋ฐฉ๋ฌธํ์ง ์๋ ๋ ธ๋๊น์ง์ ๊ฐ์ค์น ์ ๋ณด๋ฅผ ์ฐ์ ์์ ํ์ ๋ํ๋ค.
- ๋ฐฐ์ด d๋ฅผ ํ ์ค์ฉ ์ถ๋ ฅํ๋ค.
- -1์ "INF"๋ก ๋ฐ๊ฟ ์ถ๋ ฅํ๋ค.
๐ธ end ๐ธ
- ์์ ๋
ธ๋๋ถํฐ ๋ค๋ฅธ ๋ชจ๋ ๋
ธ๋๊น์ง์ ์ต๋จ๊ฑฐ๋ฆฌ๋ ๋ฐ๋ก Prim์๊ณ ๋ฆฌ์ฆ์ด๋ผ ์๊ฐํด ์ฝ๊ฒ ํ์ดํ ์ ์์๋ค.
- ๋ฐฑ์ค์์๋ Prim์ด ๋ฐ๋ก ์์ด Dijkstra์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๋ํ๋ด๋ ๊ฒ ๊ฐ๋ค.
- ์ฌ์ค ๊ฑฐ์ ๊ฐ์ ๊ฐ๋ ์ด๋ผ ํฐ ์ฐจ์ด๋ ์๋ค๊ณ ์๊ฐ๊ฐํ๋ค. ํ์ง๋ง, Prim์ ์ฐ์ต์ด ๋ง์ด ๋๋๋ฐ Dijkstra๋ ์์ง ์ฐ์ต์ด ๋ถ์กฑํ ๊ฒ ๊ฐ๋ค. ํ์ฉ ๋ฌธ์ ์์ ์ด๋ ค์์ด ๋ง๋ค.
- ๋ฌธ์ ์ ๋ถ์๊ณผ ํ์ด ์ ๋ต์ ์ ์ด๊ฐ๋ฉฐ ํ์ดํ๋ค.
728x90
'CodingTest > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ_2096 : ๋ด๋ ค๊ฐ๊ธฐ (0) | 2023.08.03 |
---|---|
BOJ_1918 : ํ์ ํ๊ธฐ์ (0) | 2023.07.09 |
BOJ_1504 : ํน์ ํ ์ต๋จ ๊ฒฝ๋ก (0) | 2023.06.28 |
BOJ_1238 : ํํฐ (0) | 2023.06.27 |
BOJ_1167 : ํธ๋ฆฌ์ ์ง๋ฆ (0) | 2023.06.25 |