https://www.acmicpc.net/problem/4195
๐ฅ ์๋ฐ๋ก ํธ๋ ์น๊ตฌ ๋คํธ์ํฌ ๋ฌธ์ ํ์ด
๐ ๋ฌธ์ ๊ฐ์
๋ฐฑ์ค 4195๋ฒ - ์น๊ตฌ ๋คํธ์ํฌ ๋ฌธ์ ๋
์ฌ๋ฌ ๋ช ์ด ์น๊ตฌ ๊ด๊ณ๋ก ์ฐ๊ฒฐ๋ ๋,
๊ฐ ๊ด๊ณ๋ง๋ค ํ์ฌ ์น๊ตฌ ๋คํธ์ํฌ์ ํฌ๊ธฐ๋ฅผ ์ถ๋ ฅํ๋ ๋ฌธ์ ์ ๋๋ค.
- ์น๊ตฌ ๊ด๊ณ๊ฐ ์ฃผ์ด์ง (A B → A์ B๊ฐ ์น๊ตฌ)
- ์น๊ตฌ ๊ด๊ณ๊ฐ ์๊ธธ ๋๋ง๋ค, A์ B๊ฐ ์ํ ์ ์ฒด ๋คํธ์ํฌ(์ฐ๊ฒฐ๋ ์งํฉ)์ ํฌ๊ธฐ๋ฅผ ์ถ๋ ฅ
- ์ด๋ฆ์ ๋ฌธ์์ด๋ก ์ฃผ์ด์ง
๐ก ์์ ์ ๋ ฅ
2
3
Fred Barney
Barney Betty
Betty Wilma
3
Fred Barney
Betty Wilma
Barney Betty
์์ ์ถ๋ ฅ
2
3
4
2
2
4
๐ ์๊ณ ๋ฆฌ์ฆ ์ ๊ทผ ๋ฐฉ์
- ํต์ฌ์ Union-Find (Disjoint Set) ์๊ณ ๋ฆฌ์ฆ
- ์ด๋ฆ์ด ๋ฌธ์์ด์ด๊ธฐ ๋๋ฌธ์, HashMap<String, Integer>๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์์ด์ ์ ์ ์ธ๋ฑ์ค๋ก ๋งคํ
- union(a, b) ์ฐ์ฐ์ ํ ๋๋ง๋ค ๋ ์งํฉ์ ๋ณํฉํ๊ณ , ๋ณํฉ๋ ์งํฉ์ ํฌ๊ธฐ๋ฅผ ๋ฐํ
โ ๊ตฌํ ์์ด๋์ด
- p[]: ๊ฐ ๋ ธ๋์ ๋ถ๋ชจ๋ฅผ ์ ์ฅ (Find ์ ์ฌ์ฉ)
- size[]: ๊ฐ ์งํฉ์ ํฌ๊ธฐ ์ ์ฅ (๋ฃจํธ ๊ธฐ์ค์ผ๋ก๋ง ์๋ฏธ ์์)
- HashMap<String, Integer>: ์ด๋ฆ์ ์ ์ ์ธ๋ฑ์ค๋ก ๋งคํ
- find(x): ๊ฒฝ๋ก ์์ถ ์ ์ฉ
- union(a, b): ๋ ์์ ๋ฒํธ์ ๋ฃจํธ๋ก ๋ณํฉํ๊ณ ํฌ๊ธฐ ์ ๋ฐ์ดํธ
๐งพ ์ฝ๋ ํด์ค
// ์ด๋ฆ์ ์ ์๋ก ๋งคํํ๊ณ ์ด๊ธฐํ
if (!name.containsKey(a)) name.put(a, count++);
if (!name.containsKey(b)) name.put(b, count++);
// find ํจ์: ๊ฒฝ๋ก ์์ถ ์ ์ฉ
private static int find(int x) {
if (p[x] != x)
p[x] = find(p[x]);
return p[x];
}
// union ํจ์: ๋ฃจํธ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ณํฉํ๊ณ size ์
๋ฐ์ดํธ
private static int union(int a, int b) {
int pa = find(a);
int pb = find(b);
if (pa == pb) return size[pa];
if (pa < pb) {
p[pb] = pa;
size[pa] += size[pb];
return size[pa];
} else {
p[pa] = pb;
size[pb] += size[pa];
return size[pb];
}
}
โ ํต์ฌ ํฌ์ธํธ
- ๋ฌธ์์ด ๊ฐ์ ๊ด๊ณ๋ฅผ ์์นํํ๊ธฐ ์ํด HashMap์ ์ฌ์ฉ
- Union-Find + size ๋ฐฐ์ด์ ํจ๊ป ์ฌ์ฉํด, ์งํฉ์ ํฌ๊ธฐ๋ฅผ ์ค์๊ฐ์ผ๋ก ์ถ์
- ๋ ธ๋ ์๊ฐ ๋ง์ ์ ์์ผ๋ฏ๋ก, ์ถฉ๋ถํ ๋ฐฐ์ด ํฌ๊ธฐ ํ๋ณด (200_001)
- find()์ ๊ฒฝ๋ก ์์ถ์ ์ ์ฉํ์ฌ ์ฑ๋ฅ ํฅ์
โจ ๊ฒฐ๋ก : ๋ฌธ์์ด ๋ฌธ์ ์ง๋ง ๊ฒฐ๊ตญ์ ๊ทธ๋ํ ๋ฌธ์
์ด ๋ฌธ์ ๋ ์ ๋ ฅ์ ๋ฌธ์์ด ๊ธฐ๋ฐ์ด์ง๋ง,
์ค์ ๋ก๋ ๊ทธ๋ํ์ ์ฐ๊ฒฐ ๊ด๊ณ์ ์งํฉ ํฌ๊ธฐ ์ถ์ ์ด๋ผ๋ ์ ํ์ ์ธ Union-Find ๋ฌธ์ ์ ๋๋ค.
“์ฌ๋์ ๋ฌธ์์ด์ด์ง๋ง, ์ฐ๊ฒฐ์ ์๋ก ๋ชจ๋ธ๋งํ๋ค.”
→ ์ด์ฒ๋ผ ์ถ์์ ์ธ ๊ฐ๋ ์ ๊ตฌ์กฐํํ๋ ๋ฅ๋ ฅ์ด ํต์ฌ์ ๋๋ค.
'Algorithm & Data Structures > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
b20040. ์ฌ์ดํด๊ฒ์ (0) | 2025.05.12 |
---|---|
b9372. ์๊ทผ์ด์ ์ฌํ (0) | 2025.05.11 |
b1976. ์ฌํ๊ฐ์ (0) | 2025.05.06 |
b1717. ์งํฉ์ ํํ (0) | 2025.05.06 |
b4803. ํธ๋ฆฌ (0) | 2025.04.28 |