# 20 ๊ทธ๋ํ
๊ทธ๋ํ๋ ๋ ธ๋์ ์ฃ์ง๋ก ๊ตฌ์ฑ๋ ์งํฉ์ด๋ค.
๋ ธ๋๋ ๋ฐ์ดํฐ๋ฅผ ํํํ๋ ๋จ์
์์ง๋ ๋ ธ๋๋ก ์ฐ๊ฒฐ
ํธ๋ฆฌ๋ ๊ทธ๋ํ์ ์ผ์ข
์ ๋์จ ํ์ธ๋
๊ทธ๋ํ์ ์ธ์ดํด์ด ์์ฑ๋๋์ง ํ๋ณ
์์์ ๋ ฌ
์กฐ๊ฑด ์ธ์ดํดX, ๋ฐฉํฅO
์ ํ ๊ด๊ณ๊ฐ ์๋ ๋ ธ๋๋ฅผ ์ ํ์ผ๋ก ์ ๋ ฌ
ex) ์๊ฐ์ ์ฒญ ์1 -> ์2
๊ฒ์ ๋น๋์ค๋
์ฃผ์ ๊ฒฐ๊ณผ๊ฐ ์ ์ผํ์ง ์๋ค.
์ต๋จ๊ฑฐ๋ฆฌ ์๊ณ ๋ฆฌ์ฆ
๋ค๋ฅธ ๋ชจ๋ ๋ ธ๋๋ก ๊ฐ๋ ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ
๋ค์ต์คํธ๋ผ
์กฐ๊ฑด ์์์ O, ์์๊ฐ์ X
๋ฒจ๋งํฌ๋
์กฐ๊ฑด ์์์ O, ์์๊ฐ์ ok
์์ ์ธ์ดํด์ด ์๋์ง? ์ต๋จ๊ฑฐ๋ฆฌ๊ฐ ์์ ๋ฌดํ๋๋ก ๊ฐ๋ค.
ex) ์๊ฐ ์ฌํ, ์ํ
ํ๋ก์ด๋ ์์
์กฐ๊ฑด ์์์ X
๋ชจ๋ ๋ ธ๋ ์์ ์ต๋จ๊ฑฐ๋ฆฌ
๋จ์ ์๊ฐ๋ณต์ก๋ ๋์๋ค. // ๋ ธ๋์ ๊ฐ์๊ฐ ์์ ๋ ๋๋ ๋ชจ๋ ๋ ธ๋์์ ๊ตฌํ ๋ ์ฌ์ฉ
์ต์์ ์ฅํธ๋ฆฌ MST
๋ชจ๋ ๋ ธ๋๋ฅผ ์ฐ๊ฒฐํ๋๋ฐ ์ต์์ ๊ฐ์ค์น ํฉ
๊ทธ๋ฌ๋ฏ๋ก ์ธ์ดํด์ด ์์ผ๋ฉด ์๋๋ค. ๊ทธ๋์ ์ ๋์จ ํ์ธ๋ ํ์ฉ
# 21 ๊ทธ๋ํ์ ํํ
3๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ๊ทธ๋ํ๋ฅผ ํํํ๋ค.
์์ง ์ค์ฌ, ๋ ธ๋ ์ค์ฌ ํํ์ผ๋ก ๋๋๋ค.
1. ์์ง ๋ฆฌ์คํธ
๊ฐ์ค์นX ๊ทธ๋ํ ํํ 2์ด ๋ฐฐ์ด A[N][2] S, E ex) 1 2 ์ 1->2
๊ฐ์ค์นO 3์ด ๋ฐฐ์ด A[N][3] S, E, V ex) 1 2 8 ์ 1-8->2
๋จ์
ํน์ ๋ ธ๋์ ๊ด๋ จ์๋ ์์ง ํ์ ์ด๋ ค์, ๋ ธ๋ ์ค์ฌ์ด ์๋๋ผ ์์ง ์ค์ฌ์ด๋ฏ๋ก
๊ทธ๋ฌ๋ฏ๋ก ๋ ธ๋ ์ค์ฌ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉX // ๋ฒจ๋ง ํฌ๋, ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ์ ์์ง ์ค์ฌ์ด์ฌ์ ์ฌ๊ธฐ์ ์ฌ์ฉ
2. ์ธ์ ํ๋ ฌ
2์ฐจ์ ๋ฐฐ์ด, ๋ ธ๋๊ฐ 5๊ฐ์ธ ๊ทธ๋ํ๋ 5 X 5๋ก ํํ
๊ฐ์ค์นX ๊ทธ๋ํ
๋์ฐฉ๋ ธ๋4
์ถ๋ฐ ๋ ธ๋3 1
๊ฐ์ค์นO ๊ทธ๋ํ
15
๋จ์
๋ ธ๋์ ๊ด๋ จ๋์ด ์๋ ์์ง๋ฅผ ํ์ํ๋ ค๋ฉด N๋ฒ ์ ๊ทผ ํ์ // ๋ฐฐ์ด ์ธ๋ฑ์ฑ ๊ฐ๋ฅํ๋ฏ๋ก ํ(start ๋ ธ๋)๊น์ง๋ ๋ฐ๋ก ์ ๊ทผ ๊ฐ๋ฅ A[2][N]
๋ ธ๋์ ๊ฐ์์ ๋นํด ์์ง๊ฐ ์ ์ ๋๋ ๊ณต๊ฐ ๋นํจ์จ์ , ๋ ธ๋์ ๊ฐ์๊ฐ ๋ง์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ ์ค๋ฅ ๋ฐ์
๊ทธ๋ฌ๋ฏ๋ก ์๊ฐ๋ณต์ก๋, ๊ณต๊ฐ๋ณต์ก๋ ๋ชจ๋ ๋์๋ค.
๊ทธ๋ฌ๋ฏ๋ก ์ธ์ ํ๋ ฌ์ ๋ ธ๋์ ๊ฐ์์ ๋ฐ๋ผ ์ ์ ํ๊ฒ ์ฌ์ฉ์ฌ๋ถ ํ๋จ
3. ์ธ์ ๋ฆฌ์คํธ
๋ ธ๋ ์ค์ฌ ์๊ณ ๋ฆฌ์ฆ์ด ๋ง๊ณ , ์ธ์ ํ๋ ฌ๋ก ํธ๋ ๊ฒ๋ ์ธ์ ๋ฆฌ์คํธ๋ก ํ ์ ์์ผ๋ฏ๋ก ์ฝํ ์์ ๋ง์ด ์ฌ์ฉ
๊ฐ์ค์นX ๊ทธ๋ํ ํํ
ArrayList<Integer>[N] // ๋ฐฐ์ด
A[3].add(4) // ์์ ๋ ธ๋ ์ข ๋ฃ ๋ ธ๋
๊ฐ์ค์นO ๊ทธ๋ํ ํํ
ArrayList<Node>[N]
์ฌ์ฉ์ ์ ์ ํด๋์ค
class Node {
int E;
int V;
}
A[3].add(new Node(4, 13)) // ์์ ๋ ธ๋ ์ข ๋ฃ ๋ ธ๋ ๊ฐ์ค์น
๊ตฌํ์ ๋ณต์กํ์ง๋ง ๊ทธ๋๋ ๋ ธ๋์ ์ฐ๊ด ๋์ด ์๋ ์์ง๋ฅผ ํ์ํ๋ ์๊ฐ์ ๋งค์ฐ ๋ฐ์ด๋๋ฉฐ // ๋ฐฐ์ด์ด๋ฏ๋ก ์ธ๋ฑ์ฑํ์ฌ ์ ๊ทผ ์๋ ๋น ๋ฆ,
๊ฐ๋ณ์ ์ด์ฌ์ ๊ณต๊ฐ ํจ์จ์ , ๊ณต๊ฐ๋ณต์ก๋ ์๊ณ , ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ์๋ฌ ๋ฐ์X
#22 ์ ๋์จํ์ธ๋
์ ๋์จ ์ฐ์ฐ ํน์ ๋ ธ๋ 2๊ฐ๋ฅผ ์ฐ๊ฒฐํด 1๊ฐ์ ์งํฉ์ผ๋ก ๋ฌถ์
ํ์ธ๋ ์ฐ์ฐ 2๊ฐ์ ๋ ธ๋๊ฐ ๊ฐ์ ์งํฉ์ ์ํด ์๋์ง ํ๋ณ // ์์ ์ ๋ํ ๋ ธ๋๋ฅผ ์ฐพ์
๊ณผ์
1. ์ด๊ธฐํ
// ๋ํ ๋ ธ๋ ์ ์ฅ ๋ฐฐ์ด
1์ฐจ์ ๋ฐฐ์ด์ ์์ ์ ์ธ๋ฑ์ค ๊ฐ์ผ๋ก ์ด๊ธฐํ // ์ฒ์์๋ ์ฐ๊ฒฐ๋ ๋ ธ๋๊ฐ ์์ผ๋ฏ๋ก ์์ ์ด ๋ํ ๋ ธ๋์ด๋ค.
2. union ์ฐ์ฐ // ํ๋์ ์งํฉ์ผ๋ก ๋ง๋ ๋ค๋ ๊ฒ์ ๋ ธ๋๋ผ๋ฆฌ ์ฐ๊ฒฐํ๋ค๋ ๋ป
๊ณผ์
1. ์์ ๊ฒ์ ๊ธฐ์ค์ผ๋ก ํ๋ค๋ฉด // ๊ธฐ์ค ์ ํ
union(1, 4) // 1๊ณผ 4๋ฅผ ์ฐ๊ฒฐ, ์์ ๊ฒ ๊ธฐ์ค์ผ๋ก ์ฐ๊ฒฐํ๋ฉด 4์ 1๋์
union(5, 6) // 6์ 5๋์
union ์ฐ์ฐ์ ํญ์ ๋ํ ๋ ธ๋๋ผ๋ฆฌ ์ฐ๊ฒฐํ๋ค.
union(4, 6)
find(4) // 4์ ๋ํ ๋ ธ๋ ์ฐพ์ 1
find(6) // 6์ ๋ํ ๋ ธ๋ ์ฐพ์ 5
๋ํ๋ ธ๋ (1, 5) ์ฐพ์์ ์ฐ๊ฒฐ // ์ฆ, 5์ 1 ๋์
4์ 6์ union ํ์ง๋ง ์ค์ ๋ก 1๊ณผ 5๋ฅผ ์ฐ๊ฒฐํ์ฌ ๊ฒฐ๊ณผ์ ์ผ๋ก 4์ 6์ด ์ฐ๊ฒฐ๋์๋ค.
3. find ์ฐ์ฐ์ ์ฐ๊ฒฐ๋์ด ์๋์ง(ํ ์งํฉ์ธ์ง)์ฌ๋ถ๋ฅผ ํ๋จ
find์ฐ์ฐ //์ธ๋ฑ์ค์ ์ ์ฅ๋ ๊ฐ ๋น๊ต !=์ด๋ฉด ์ ์ฅ๋ ๊ฐ ์ธ๋ฑ์ค๋ก ์ด๋ํด์ ==
๊ณผ์
1. ๋ ธ๋์ index์ value ๋น๊ต
2. != value์ ํด๋น๋๋ index(๋ ธ๋)๋ก ์ด๋
3. == ์ผ๋๊น์ง ๋ฐ๋ณต // ์ฆ, ๋ํ๋ ธ๋ ์ฐพ์๋๊น์ง, ์ฌ๊ทํจ์๋ก ๊ตฌํ
4. ์ฌ๊ทํจ์๋ฅผ ๋น ์ ธ๋์ค๋ฉด์ ๊ฑฐ์น๋ ๋ชจ๋ ๋ ธ๋๋ฅผ ๋ํ ๋ ธ๋๊ฐ์ผ๋ก ๋ณ๊ฒฝ
find ์ฐ์ฐ์ ๋จ์ํ ๋ํ๋ ธ๋๋ง ์ฐพ๋ ์ญํ ์ ํ๋ ๊ฒ์ด ์๋๋ผ ๊ทธ๋ํ๋ฅผ ์ ๋ํ์ฌ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์
๊ฒฝ๋ก ํจ์ถ ๋๋ฉฐ ํ๋ฒ์ ์ด๋์ผ๋ก ๋ํ๋ ธ๋๋ฅผ ์ฐพ์ ์ ์์ด์ ์๊ฐ๋ณต์ก๋ ๊ฐ์ // ์ฌ๋ฌ ๋ ธ๋๋ฅผ ๊ฑฐ์ณ์ผ ๋ํ ๋ ธ๋๋ฅผ ์ฐพ์ ์ ์๋ ๊ฒฝ๋ก์์ ๋ ์งง์ ๊ฒฝ๋ก๋ก ๊ฐ ์ ์๋๋ก ํจ์ผ๋ก์จ
# 23 ์์์ก๋ ฌ
์กฐ๊ฑด ์ธ์ดํดX, ๋ฐฉํฅO
๋ ธ๋๋ฅผ ์ ํ์ผ๋ก ์ ๋ ฌ
์ฃผ์ ๊ฒฐ๊ณผ๊ฐ ์ ์ผํ์ง ์๋ค.
๊ธฐ๋ฅ ๋ ธ๋๊ฐ์ ์์ ๊ฒฐ์ , ํน์ง ์กฐ๊ฑด ์ธ์ดํด X, ๋ฐฉํฅ O, ์๊ฐ๋ณต์ก๋ O(V+E) // ๋ ธ๋์ ๊ฐ์+ ์์ง์ ๊ฐ์
์์ ์ ๋ ฌ์ ํต์ฌ์ ์ง์ ์ฐจ์ // ์๊ธฐ ์์ ์ ๊ฐ๋ฆฌํค๋ ์์ง์ ๊ฐ์
1. ์ด๊ธฐํ // ์ธ์ ๋ฆฌ์คํธ ArrayList ๋ฐฐ์ด๋ก ์๋ณธ ๊ทธ๋ํ ํํ, ์ง์ ์ฐจ์ ๋ฐฐ์ด ์ด๊ธฐํ // 1์ด 2, 3์ ๊ฐ๋ฆฌํค๋ฏ๋ก D[2]++; D[3]++;
2. ์ง์ ์ฐจ์๊ฐ 0์ธ ๋ ธ๋ ์ ํํ์ฌ ์ ๋ ฌ ๋ฐฐ์ด์ ์ ์ฅ
3. ์ธ์ ๋ฆฌ์คํธ์์ ์ ์ฅ๋ ๋ ธ๋๊ฐ ๊ฐ๋ฆฌํค๋ ๋ ธ๋๋ค์ ์ง์ ์ฐจ์ -1
4. 2, 3๋ฐ๋ณต ๋ชจ๋ ๋ ธ๋๊ฐ ์ ๋ ฌ ๋ ๋๊น์ง ๋ฐ๋ณต
# 24 ๋ค์ต์คํธ๋ผ