Tags
- ๊ตฌํ
- DP
- BFS
- greedy
- dfs
- BOJ
- Java
- PGM
- stack
- ๋ฐฑํธ๋ํน
- Dynamic Programming
- ์ ์๋ก
- ๊ทธ๋ํ ํ์
- ๊ต์ฌ
- LV2
- ์ ๋ ฌ
- Brute Force Algorithm
- ๊ทธ๋ํ ์ด๋ก
- ๋ฌธ์์ด
- CodingTest
- ๋๋น ์ฐ์ ํ์
- Python
- sort
- SpringBoot
- ์ํ
- queue
- ์๋ฃ๊ตฌ์กฐ
- ๊น์ด ์ฐ์ ํ์
- Study
- ์๋ฎฌ๋ ์ด์
Archives
๊ธฐ๋ก๋ฐฉ
BOJ_20040 : ์ฌ์ดํด ๊ฒ์ ๋ณธ๋ฌธ
๐ธ ๋ฌธ์ ๋ถ์ ๐ธ
- n๊ฐ์ ์ ๋ค ์ฌ์ด์ m๊ฐ์ ์ ๋ถ์ ๊ทธ์ ๋, ์ฌ์ดํด์ด ์๊ธฐ๋ ์์ ์ ํ์ธํ๋ค.
- ์ฌ์ดํด์ด ์ฒ์ ์๊ธด ์์๋ฅผ ์ถ๋ ฅํ๋ค. ์ฌ์ดํด์ด ์๊ธฐ์ง ์์ผ๋ฉด 0์ ์ถ๋ ฅํ๋ค.
๐ธ ๋ฌธ์ ํ์ด ๐ธ
- ๋ถ๋ฆฌ ์งํฉ(Disjoint Set)์ ์ด์ฉํด ์ฌ์ดํด์ด ์๊ธฐ๋ ์์ ์ ํ์ ํ๋ค.
๐ธ ์ฝ๋ ๐ธ
import java.io.*;
import java.util.StringTokenizer;
public class Main {
private static int[] parent;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
parent = new int[n];
for (int i = 0; i < n; i++) {
parent[i] = i;
}
int answer = 0;
for (int i = 1; i <= m; i++) {
st = new StringTokenizer(br.readLine());
if (!union(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()))) {
answer = i;
break;
}
}
bw.write(Integer.toString(answer));
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) {
int ap = find(a);
int bp = find(b);
if (ap == bp) return false;
else if (a == ap && b == bp) parent[ap] = bp;
else parent[bp] = ap;
return true;
}
}
๐ธ ์ฝ๋ ํด์ ๐ธ
- ๋ถ๋ชจ ์ธ๋ฑ์ค๋ฅผ ๊ฐ๋ฆฌํค๋ int๋ฐฐ์ด parent๋ฅผ ์ ์ธํ๊ณ , ๊ฐ ์ธ๋ฑ์ค ๊ฐ์ผ๋ก ์ด๊ธฐํํ๋ค.
- find() ๋ฉ์๋๋ ์ ์ฅ๋ ์ธ๋ฑ์ค๋ฅผ ํ๊ณ ๊ฐ๋ฉฐ ์ต์ข ๋ฃจํธ ์ธ๋ฑ์ค๋ฅผ ์ฐพ๊ณ , ํด๋น ์ธ๋ฑ์ค๋ก ์์ ์ธ๋ฑ์ค์ ๊ฐ์ ๋ณ๊ฒฝ ํ ๋ฐํํ๋ค.
- union() ๋ฉ์๋๋ ๋ ์ ์ ๋ฃจํธ ์ธ๋ฑ์ค๋ฅผ ์ฐพ๋๋ค.
- ๋ ๋ฃจํธ ์ธ๋ฑ์ค๊ฐ ๊ฐ์ผ๋ฉด, ๊ฐ์ ์งํฉ์ ์ฐ๊ฒฐํ๊ฒ ๋๋ฏ๋ก ์ฌ์ดํด์ด ์๊ธด๋ค. false๋ฅผ ๋ฐํํ๋ค.
- ๊ธฐ๋ณธ์ bp ์ธ๋ฑ์ค์ ๋ถ๋ชจ๋ฅผ ap๋ก ์ ์ฅํ๋ค.
- ๋ง์ฝ a๊ฐ ๋ถ๋ชจ ์ธ๋ฑ์ค๊ฐ ์๊ณ , b๋ ์์ ๊ฒฝ์ฐ์๋ ap ์ธ๋ฑ์ค์ bp๋ฅผ ์ ์ฅํ๋ค.
- union() ๊ฒฐ๊ณผ๊ฐ false๊ฐ ๋์จ ์์๋ฅผ ์ถ๋ ฅํ๋ค. ๋ง์ฝ false๊ฐ ๋์ค์ง ์์ผ๋ฉด 0์ ์ถ๋ ฅํ๋ค.
๐ธ end ๐ธ
- ๋ถ๋ฆฌ ์งํฉ ๋ฌธ์ ์ธ๊ฑธ ๋ฐ๋ก ์์์ ์ด๋ ต์ง ์๊ฒ ํ์ดํ ์ ์์๋ค. ๊ทผ๋ฐ ์๊ธด๊ฑด ์ง๊ธ๊น์ง ๋ถ๋ฆฌ ์งํฉ(Disjoint Set)์ Union-Find ์๊ณ ๋ฆฌ์ฆ์ผ๊ณ ๋ถ๋ ๋ค. ์ฌ์ฉ๋๋ ๋ฉ์๋๋ฅผ ๊ธฐ์ตํ๊ธฐ ์ข์์ง๋ง ์ ๋๋ก ๊ธฐ์ตํ๋๋ก ํ์.
728x90
'CodingTest > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ_1005 : ACM Craft (0) | 2024.04.04 |
---|---|
BOJ_12100 : 2048 (Easy) (0) | 2024.03.31 |
BOJ_18352 : ํน์ ๊ฑฐ๋ฆฌ์ ๋์ ์ฐพ๊ธฐ (0) | 2024.03.27 |
BOJ_1647 : ๋์ ๋ถํ ๊ณํ (0) | 2024.03.14 |
BOJ_1197 : ์ต์ ์คํจ๋ ํธ๋ฆฌ (0) | 2024.03.13 |