Tags
- queue
- Dynamic Programming
- BOJ
- ๊ทธ๋ํ ์ด๋ก
- ์๋ฎฌ๋ ์ด์
- sort
- Brute Force Algorithm
- stack
- Study
- Java
- PGM
- Python
- ์ํ
- SpringBoot
- dfs
- ๋ฐฑํธ๋ํน
- ๊ตฌํ
- ์ ์๋ก
- DP
- ๊ต์ฌ
- ์ ๋ ฌ
- LV2
- BFS
- greedy
- ๊ทธ๋ํ ํ์
- ๋ฌธ์์ด
- ๋๋น ์ฐ์ ํ์
- ๊น์ด ์ฐ์ ํ์
- ์๋ฃ๊ตฌ์กฐ
- CodingTest
Archives
๊ธฐ๋ก๋ฐฉ
BOJ_1922 : ๋คํธ์ํฌ ์ฐ๊ฒฐ ๋ณธ๋ฌธ
๐ธ ๋ฌธ์ ๋ถ์ ๐ธ
- N๊ฐ์ ์ปดํจํฐ ์ฌ์ด M๊ฐ์ ๋คํธ์ํฌ๊ฐ ์๋ค.
- ๋ชจ๋ ์ปดํจํฐ๋ฅผ ์ฐ๊ฒฐํ ์ ์๋ ๋คํธ์ํฌ ์ต์ ๋น์ฉ์ ๊ตฌํ๋ค.
๐ธ ๋ฌธ์ ํ์ด ๐ธ
- ์ ํ์ ์ธ MST ๋ฌธ์ ์ด๋ค. ๋ชจ๋ ๋ ธ๋๋ฅผ ํ ๋ฒ์ฉ์ ์ฐ๊ฒฐํ๋ฉฐ ์ต์ ๋น์ฉ์ด ๋๋๋ก ํ๊ธฐ ๋๋ฌธ์ด๋ค.
- ์ฌ๊ธฐ์๋ ํฌ๋ฃจ์ค์นผ(Kruskal) ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ค.
๐ธ ์ฝ๋ ๐ธ
import java.io.*;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
public class Main {
private static int[] parent;
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));
StringTokenizer st = null;
int N = Integer.parseInt(br.readLine()); // ์ปดํจํฐ ์
int M = Integer.parseInt(br.readLine()); // ์ฐ๊ฒฐ์ ์
parent = new int[N + 1];
for (int i = 1; i <= N; i++) {
parent[i] = i;
}
PriorityQueue<Network> pq = new PriorityQueue<>();
for (int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine());
pq.add(new Network(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken())));
}
// Kruskal
int sum = 0;
while (!pq.isEmpty()) {
Network n = pq.poll();
if (union(n.start, n.end)) {
sum += n.cost;
}
}
// Output
bw.write(Integer.toString(sum));
bw.flush();
}
private static int find(int a) {
if (parent[a] == a) {
return a;
}
return parent[a] = find(parent[a]);
}
private static boolean union(int a, int b) {
a = find(a);
b = find(b);
if (a == b) {
return false;
}
parent[a] = b;
return true;
}
private static class Network implements Comparable<Network> {
int start, end, cost;
public Network(int start, int end, int cost) {
this.start = start;
this.end = end;
this.cost = cost;
}
@Override
public int compareTo(Network o) {
return this.cost - o.cost;
}
}
}
๐ธ ์ฝ๋ ํด์ ๐ธ
- ๋น์ฉ์ด ๋ฎ์ ๋คํธ์ํฌ๋ถํฐ ํ๋์ฉ ์ฐ๊ฒฐํด๋ณด๋ฉฐ, ์ํด์ด ์๊ธฐ์ง ์๋๋ก union-find ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๊ฐ์ ์งํฉ์ ๋ฐฐ์ ํ๋ค.
- ์ฐ๊ฒฐ ๋ ๋๋ง๋ค ๊ทธ ๋คํธ์ํฌ ๋น์ฉ์ ๋์ ํด ์ถ๋ ฅํ๋ค.
๐ธ end ๐ธ
- ์ฒ์์ MST์ธ ๊ฒ์ ์์์ง๋ง, ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๋ค์ต์คํธ๋ผ๋ฅผ ๊ณ ๋ฅด๋ ์ค์๋ฅผ ๋ฒํ๋ค.
- ๋ค์ต์คํธ๋ผ๋ ๋ฐ๋์ MST๊ฐ ๋์ค๋ ๊ฒ์ ์๋๋ค.
- ์์ ๋ ธ๋๋ฅผ 1๋ถํฐ n๊น์ง ํ ๋ฒ์ฉ ๋์๊ฐ๋ฉด์ ๋๋ ค์ ๊ฐ์ค์น ์ต์๊ฐ์ ๊ตฌํ๋ ๋ฐฉ์์ผ๋ก ์์ ๋ ํต๊ณผํ์ง๋ง, ์๊ฐ ์ด๊ณผ๊ฐ ๋ฌ๋ค.
- MST ๊ด๋ จ ์ด๋ก ์ด ์์ง ๋ถ์คํ ๊ฒ ๊ฐ๋ค. ๊ณต๋ถ๊ฐ ๋ ํ์ํ๋ค.
728x90
'CodingTest > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ_1339 : ๋จ์ด ์ํ (0) | 2024.05.06 |
---|---|
BOJ_14002 : ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด 4 (0) | 2024.05.01 |
BOJ_2573 : ๋น์ฐ (0) | 2024.04.27 |
BOJ_14499 : ์ฃผ์ฌ์ ๊ตด๋ฆฌ๊ธฐ (0) | 2024.04.26 |
BOJ_1976 : ์ฌํ ๊ฐ์ (0) | 2024.04.22 |