๊ทธ๋ํ๋?
: ์๋ฃ๊ตฌ์กฐ์ ์ผ์ข
: ์ ์ (Node, Vertex), ๊ฐ์ (Edge)๋ก ๊ตฌ์ฑ -> ๊ฐ์ ์ด๋? ์ ์ ๊ณผ์ ๊ด๊ณ๋ฅผ ์๋ฏธํ๋ค.
: G=(V,E)๋ก ๋ํ๋ธ๋ค.
<๊ทธ๋ํ์ ๊ด๋ จ๋ ์ฉ์ด ์ ๋ฆฌ>
1. ๊ทธ๋ํ์ ๊ฒฝ๋ก๋?
: ์์์ ->๋์ฐฉ์ ์ผ๋ก ๊ฐ๋ ๊ฐ์ ์ ์ฐ์
ex) ์์ ๊ทธ๋ฆผ์ผ๋ก ํํํด๋ณด๋ฉด ์ ์ 2์์ 1๋ก ๊ฐ๋ ๊ฒฝ๋ก๋ ์๋ ๋ ๊ฐ์ง ์ด๋ค.
2 -> 1
2 -> 3 -> 1
2. ์ฌ์ดํด์ด๋?
: ์์์ ๊ณผ ๋์ฐฉ์ ์ด ๋ชจ๋ ๊ฐ์ ๊ฒฝ์ฐ. ์ฆ, ์ถ๋ฐํ ์ ์ ์ผ๋ก ๋ค์ ๋๋์์ค๋ ๊ฒฝ์ฐ
2-1. ๋จ์ ๊ฒฝ๋ก์ ๋จ์ ์ฌ์ดํด?
๋จ์ํ๋ค๋ ๊ฑด, ๊ฒฝ๋ก/์ฌ์ดํด์์ ๊ฐ์ ์ ์ ์ ๋ ๋ฒ ์ด์ ๋ฐฉ๋ฌธํ์ง ์๋ ๊ฒฝ๋ก/์ฌ์ดํด์ ์๋ฏธํ๋ค.
์ฆ, ํน๋ณํ ๋ง์ด ์์ผ๋ฉด ์ผ๋ฐ์ ์ผ๋ก ๋จ์ ๊ฒฝ๋ก/์ฌ์ดํด์ ์๋ฏธํ๋ค๋ ๊ฒ์ ์์๋์.
3. ๋ฐฉํฅ์ด ์๋ ๊ทธ๋ํ?
: ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด A -> B ๋ก ๊ฐ์ ๋ฐฉํฅ์ด ์๋ค๋ฉด B -> A๋ก ๊ฐ๋ ๊ฐ์ ์ ์กด์ฌํ์ง ์๋๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
4. ๋ฐฉํฅ์ด ์๋ ๊ทธ๋ํ?
: ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด A -> B ๊ฐ ๋ฐฉํฅ์์ด ๊ฐ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์๋ ๊ฒฝ์ฐ, B -> A๋ก๋ ๊ฐ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ฃผ์ํ ์ ) ์ด๋ ๊ฒ, ๋ฐฉํฅ์ด ์๋ ๊ทธ๋ํ๋ A -> B์ ๊ฒฝ์ฐ์ B ->A ๊ฒฝ์ฐ์ ๊ฐ์ 2๊ฐ๋ฅผ ๋ชจ๋ ์ ์ฅํด์ค์ผ ํ๋ค.
5. ๊ฐ์ค์น?
: ๊ฐ์ ์ ๊ฐ์ค์น๊ฐ ์๋ ๊ฒฝ์ฐ
=> A์์ B๋ก ์ด๋ํ๋ ๊ฑฐ๋ฆฌ, ์ด๋ํ๋๋ฐ ํ์ํ ์๊ฐ, ์ด๋ํ๋๋ฐ ํ์ํ ๋น์ฉ ๋ฑ
6. ์ฐจ์(Degree)?
: ์ ์ ๊ณผ ์ฐ๊ฒฐ๋์ด ์๋ ๊ฐ์ ์ ๊ฐ์
: ๋ฐฉํฅ ๊ทธ๋ํ์ ๊ฒฝ์ฐ In-degree(์ ์ ์ผ๋ก ๋ค์ด์ค๋ ๊ฐ์ ), Out-degree(์ ์ ์์ ๋๊ฐ๋ ๊ฐ์ )๋ก ๋๋์ด์ ์ฐจ์๋ฅผ ๊ณ์ฐํด์ผ ํ๋ค.
<๊ทธ๋ํ๋ฅผ ์ฝ๋๋ก๋ ์ด๋ป๊ฒ ํํํด์ผ ํ ๊น?>
1. ์ด๋ค ์ ์ x์ ์ฐ๊ฒฐ๋ ๊ฐ์ ์ ํจ์จ์ ์ผ๋ก ์ฐพ๊ธฐ ์ํด์๋ ์ด๋ป๊ฒ ๊ทธ๋ํ๋ฅผ ์ ์ฅํด์ผ ํ ๊น?
1) ์ธ์ ํ๋ ฌ๋ก ์ ์ฅํ๊ธฐ(2์ฐจ์ํ๋ ฌ/2์ฐจ์ ๋ฐฐ์ด ์ฌ์ฉ)
A[i][j] = 1 // i์์ j๋ก ๊ฐ๋ ๊ฐ์ ์ด ์๋ ๊ฒฝ์ฐ
A[i][j] = 0 // i์์ j๋ก ๊ฐ๋ ๊ฐ์ ์ด ์๋ ๊ฒฝ์ฐ
๊ฐ์ค์น๊ฐ ์์ ๋, A[i][j] = w(๊ฐ์ค์น) ํํ๋ก ์ ์ฅ
2) ์ธ์ ๋ฆฌ์คํธ๋ก ์ ์ฅํ๊ธฐ(๋งํฌ๋ ๋ฆฌ์คํธ ์ฌ์ฉ)
A[i] = j์ ๊ฐ์ด ์ ์ i์ ์ฐ๊ฒฐ๋ ๋ชจ๋ ์ ์ (j)์ ๋ฆฌ์คํธ์ ํฌํจํ๋ ๋ฐฉ์์ผ๋ก ์ ์ฅํ์
A[1] = 2 5 // ์ ์ 1๊ณผ ์ฐ๊ฒฐ๋ ์ ์ ์ 2, 5 ์ด๋ค.
A[2] = 1 3 4 5 // ์ ์ 2์ ์ฐ๊ฒฐ๋ ์ ์ ์ 1, 3, 4, 5 ์ด๋ค.
A[3] = 2 4
A[4] = 3 5 2 6
A[5] = 1 2 4
A[6] = 4
์ด ๊ฒฝ์ฐ๋ ๊ฐ ๋ฆฌ์คํธ๋ง๋ค ๊ธธ์ด๊ฐ ๋ค๋ฅด๋ฏ๋ก ๋์ ๋ฐฐ์ด์ด ํ์ํ๋ค. vector(C++) ๋ arrayList(JAVA) ์ฌ์ฉ
๊ฐ์ค์น๊ฐ ์์ ๋, ์๋์ฒ๋ผ A[i] = (j, w) ํํ๋ก ๊ฐ์ค์น(w)๋ ํจ๊ป ์ ์ฅํ์
A[1] = (2,2) (5,7) // 1์์ 2๋ก ๊ฐ๋๋ฐ ๊ฐ์ค์น๊ฐ 2๋ค. 1์์ 5๋ก ๊ฐ๋๋ฐ ๊ฐ์ค์น๊ฐ 7์ด๋ค.
A[2] = (1,2) (3,2) (4,3) (5,1)
A[3] = (2,2) (4,1)
A[4] = (3,1) (5,7) (2,3) (6,7)
A[5] = (1,7) (2,1) (4,7)
A[6] = (4,7)
2. ๊ทธ๋ํ์ ๊ณต๊ฐ ๋ณต์ก๋๋ฅผ ์์๋ณด์~!
1) ์ธ์ ํ๋ ฌ O(V^2) // 2์ฐจ์ ๋ฐฐ์ด/ํ๋ ฌ์ด๋ฏ๋ก ์ ์ ์ ์ ๊ณฑ๋งํผ
2) ์ธ์ ๋ฆฌ์คํธ O(E) // ๊ฐ์ ์ ์ ์ฅํ๋๊น ๊ฐ์ ์ ๊ฐ์๋งํผ
์ฆ, E << V^2 ์ด๋ฏ๋ก ์ธ์ ๋ฆฌ์คํธ๊ฐ ๋ ์ข์ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
ํ์ง๋ง, ๋ค์ 2๊ฐ์ง ๊ฒฝ์ฐ์๋ ์ธ์ ํ๋ ฌ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ๋ ์ข์ ์ ์๋ค.
โ u, v๊ฐ ์ฃผ์ด์ง ๊ฒฝ์ฐ, u -> v๋ก ๊ฐ๋ ๊ฐ์ ์ด ์กด์ฌํ๋์ง๋ฅผ ์ฐพ์ ๋
์ธ์ ํ๋ ฌ์ ๊ฒฝ์ฐ A[u][v] = 1์ธ์ง๋ง ์ฐพ์ผ๋ฉด ๋๋ฏ๋ก ์ธ์ ํ๋ ฌ์ ๊ฒฝ์ฐ O(1)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
์ธ์ ๋ฆฌ์คํธ์ ๊ฒฝ์ฐ, A[u] ๋ฅผ ๋ชจ๋ ํ์ํด์ผ ํ๋ฏ๋ก u์ ์ฐจ์๋งํผ์ ์๊ฐ์ด ๊ฑธ๋ฆด ๊ฒ์ด๋ค.
โก ๋ ์ ์ u, v๊ฐ ์ฃผ์ด์ง ๊ฒฝ์ฐ, v,u์ ์ ์ ์ด ์กด์ฌํ๋์ง๋ฅผ ์ฐพ์ ๋
์ธ์ ํ๋ ฌ์ ๊ฒฝ์ฐ A[v][u] = 1์ธ์ง๋ง ์ฐพ์ผ๋ฉด ๋๋ฏ๋ก O(1)์ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค.
์ธ์ ๋ฆฌ์คํธ์ ๊ฒฝ์ฐ์๋ A[v] ๋ฅผ ๋ชจ๋ ํ์ํด์ u๋ฅผ ์ฐพ์์ผ ํ๋ฏ๋ก v์ ์ฐจ์๋งํผ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค.
โข ์์ ๊ทธ๋ํ๊ฐ ์ฃผ์ด์ง ๊ฒฝ์ฐ
์ธ์ ๋ฆฌ์คํธ์ ๊ณต๊ฐ๋ณต์ก๋๊ฐ ๊ฐ์ผ๋ฏ๋ก ์ธ์ ํ๋ ฌ๋ก ๊ตฌํํ๋๊ฒ ๋ ๊ฐ๋จํ๊ณ ๊ณต๊ฐ๋ณต์ก๋๋ ๋์ผํ ๊ฒ์ด๋ค.
์ฐธ๊ณ ) ์์ ๊ทธ๋ํ์ ๊ฐ์ ์ ๊ฐ์๋E = V(V-1)/2 ์ด๋ค.
๊ทธ๋๋ ์ธ์ ๋ฆฌ์คํธ๋ฅผ ์ฐ๋ ๊ฒฝ์ฐ๊ฐ ํจ์ฌ ๋ง์ผ๋ ์ธ์ ๋ฆฌ์คํธ๋ฅผ ๋ง์ด ์ฐ์ตํ์ใ ใ
์๋ฅผ ๋ค์ด, ์ ์ X์ ์ฐ๊ฒฐ๋ ๋ชจ๋ ๊ฐ์ ์ ์ฐพ๋ ๊ฒฝ์ฐ,
์ธ์ ํ๋ ฌ์ ๊ฒฝ์ฐ, A[x][1] ๋ถํฐ ๋๊น์ง ํ์ํด์ผ ํ๋ฏ๋ก O(v)์ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค.
์ธ์ ๋ฆฌ์คํธ์ ๊ฒฝ์ฐ, ์ค์ ๋ก ์ฐ๊ฒฐ๋ ๊ฐ์ ๋ง ์ ์ฅํ๋ฏ๋ก O(์ฐจ์)์ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค.
๊ทธ๋์ ์ธ์ ๋ฆฌ์คํธ์ ๊ฒฝ์ฐ๊ฐ ์๊ฐ์ด ๋ ๋น ๋ฅด๋ค! ๊ณต๊ฐ๋ ์ ๊ฒ ๋ ๋ค! ๋ผ๊ณ ๋งํ ์ ์๋ค.
<๊ธฐํ ๊ฟํ>
์ธ์ ๋ฆฌ์คํธ๋ ๊ตฌํํ๊ธฐ๊ฐ ๊น๋ค๋ก์ด๋ฐ, ๋งํฌ๋ ๋ฆฌ์คํธ๋ณด๋ค ๊ตฌํํ๊ธฐ ์ฌ์ด ๋ฐฉ๋ฒ์ ์์๊น?
๊ฐ์ ๋ฆฌ์คํธ ๋ฐฉ๋ฒ์ผ๋ก ๋์ ํ ๋น ์์ด ์ธ์ ๋ฆฌ์คํธ์ ๋น์ทํ ํจ๊ณผ๋ฅผ ๋ด๋ณด์!
๊ฐ์ ๋ฆฌ์คํธ?
: ๋งํฌ๋ ๋ฆฌ์คํธ๋ฅผ 1์ฐจ์ ๋ฐฐ์ด์ ์ด์ฉํด์ ๊ตฌํํ ์ ์๋ ๋ฐฉ๋ฒ
๊ทธ๋์ ๊ฐ์ ๋ฆฌ์คํธ๋ก ์ด๋ป๊ฒ ๊ทธ๋ํ๋ฅผ ๊ตฌํํด?
1) E๋ผ๋ ๋ฐฐ์ด์ ๊ฐ์ ์ ๋ชจ๋ ์ ์ฅํ๋ค.
2) ์ ์ฅ๋ ๋ฐฐ์ด์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ค.
3) ๊ฐ ๊ฐ์ ์ ์ ์ ์ ์ ๊ธฐ์ค์ผ๋ก ๊ฐ์๋ฅผ ์ผ๋ค.
i | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
cnt[i] | 0 | 2 | 4 | 2 | 4 | 3 | 1 |
4) cnt[i] ๋ฐฐ์ด์ ์์์๋ถํฐ ๋์ ํด ๋๊ฐ๋ฉฐ ์ ์ฅํ๋ค.
i | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
cnt[i] | 0 | 2 | 6 | 8 | 12 | 15 | 16 |
์ด๋ ๊ฒ ํ๋ฉด,
3์ผ๋ก ์์ํ๋ ์ ์ ์ 6๋ฒ์งธ๋ถํฐ 8๋ฒ์งธ ์ ๊น์ง (E[6] ~ E[7])
4๋ก ์์ํ๋ ์ ์ ์ 8๋ฒ์งธ~12๋ฒ์งธ ์ ๊น์ง (E[8] ~ E[11])
5๋ก ์์ํ๋ ์ ์ ์ 12๋ฒ์งธ~15๋ฒ์งธ ์ ๊น์ง (E[12] ~ E[14]) ์์ ์ ์ ์๋ค.
๊ทธ๋ผ ์ฐ๊ฒฐ๋ ์ ๋ณด๋ค์ ํธํ๊ฒ ์ฌ์ฉํ ์ ์๊ฒ์ง~?
<๊ด๋ จ๋ฌธ์ >
'๐ Coding Test Study' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++][๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ] ๊ตฌํ ๋ฐฉ๋ฒ (0) | 2021.07.29 |
---|---|
C++ ๋ฌธ์์ด ๋ค๋ฃจ๊ธฐ (0) | 2021.05.20 |
DP(Dynamic Programming)? (0) | 2021.04.27 |
[Algorithm&์๋ฃ๊ตฌ์กฐ] BFS/DFS? (0) | 2021.04.13 |
[Algorithm] ๋ธ๋ฃจํธ ํฌ์ค(Brute Force) (0) | 2021.03.01 |