๐ก ๋๋ถ๋ถ์ ๋ด์ฉ์ Do it! ์๊ณ ๋ฆฌ์ฆ ์ฝ๋ฉํ ์คํธ with JAVA ๊ฐ์๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ ๋ฆฌํ์์ต๋๋ค.
DFS (Depth - First Search)
DFS (๊น์ด ์ฐ์ ํ์)์ ๊ทธ๋ํ ์์ ํ์ ๊ธฐ๋ฒ ์ค ํ๋์ด๋ค.
๊ทธ๋ํ์ ์์ ๋ ธ๋์์ ์ถ๋ฐํ์ฌ ํ์ํ ํ ์ชฝ ๋ถ๊ธฐ๋ฅผ ์ ํ์ฌ ์ต๋ ๊น์ด๊น์ง ํ์์ ๋ง์น ํ ๋ค๋ฅธ์ชฝ ๋ถ๊ธฐ๋ก ์ด๋ํ์ฌ ๋ค์ ํ์ํ๋ค. (์ต๋ ๊น์ด๊น์ง ํ์ํ ํ ๋ค์์ผ๋ก ๋์ด๊ฐ๋ค!)
ํน์ง
- ์ฌ๊ทํจ์๋ก ๊ตฌํํ๋ค. ์ด๋, stack overflow์ ์ ์ํด์ผ ํ๋ค.
- ์คํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉํ๋ค.
์๊ฐ ๋ณต์ก๋
O(V + E)
O(๋ ธ๋ ์ + ์ฃ์ง ์)
ํต์ฌ ์ด๋ก
- ๋
ธ๋ ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ์ฒดํฌํ ๋ฐฐ์ด์ด ํ์ํ๋ค.
- ํ ๋ฒ ๋ฐฉ๋ฌธํ ๋ ธ๋๋ ๋ค์ ๋ฐฉ๋ฌธํ๋ฉด ์ ๋๊ธฐ ๋๋ฌธ์ด๋ค. ์ค๋ณต ๋ฐฉ๋ฌธ ๋ถ๊ฐ!!
- ๊ทธ๋ํ(๋ฐ์ดํฐ๋ฅผ ๋ด๋ ์๋ฃ๊ตฌ์กฐ)๋ ์ธ์ ๋ฆฌ์คํธ๋ก ํํํ๋ค.
- ์คํ ์ฑ์ง์ ๊ฐ์ง๋ ์ฌ๊ท ํจ์๋ก ์ฃผ๋ก ๊ตฌํํ๋ค.
- DFS์ ํ์ ๋ฐฉ์์ ํ์ ์ ์ถ(LIFO) ํน์ฑ์ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ด๋ค.
BFS (Breadth - First Search)
BFS (๋๋น ์ฐ์ ํ์)์ ๊ทธ๋ํ ์์ ํ์ ๊ธฐ๋ฒ ์ค ํ๋์ด๋ค.
์์ ๋ ธ๋์์ ์ถ๋ฐํ๊ณ , ์์ ๋ ธ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฐ๊น์ด ๋ ธ๋๋ฅผ ๋จผ์ ๋ฐฉ๋ฌธํ๋ฉด์ ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
ํน์ง
- ์ ์ ์ ์ถ(FIFO) ํ์์ด๋ค.
- ํ(queue) ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉํ๋ค.
์๊ฐ ๋ณต์ก๋
O(V + E)
O(๋ ธ๋ ์ + ์ฃ์ง ์)
DFS์ BFS์ ์๊ฐ ๋ณต์ก๋๋, ๋ ๋ฐฉ์ ๋ชจ๋ ์กฐ๊ฑด ๋ด์ ์ ์ฒด ๋ ธ๋๋ฅผ ํ์ํ๋ค๋ ์ ์์ ๋์ผํ๋ค. ํ์ง๋ง, ์ผ๋ฐ์ ์ผ๋ก DFS๋ฅผ ์ฌ๊ทํจ์๋ก ๊ตฌํํ๋ค๋ ์ ์์ BFS๊ฐ ์กฐ๊ธ ๋ ๋น ๋ฅด๊ฒ ๋์ํ๋ค.
ํต์ฌ ์ด๋ก
DFS์ ๋์ผํ ํน์ง์ด๋ค.
- ๋ฐฉ๋ฌธํ๋ ๋ ธ๋๋ ๋ค์ ๋ฐฉ๋ฌธํ์ง ์๋๋ค.
- ๊ทธ๋ํ(๋ฐ์ดํฐ๋ฅผ ๋ด๋ ์๋ฃ๊ตฌ์กฐ)๋ ์ธ์ ๋ฆฌ์คํธ๋ก ํํํ๋ค.
DFS์์ ์ฐจ์ด์ ์, ์คํ์ด ์๋ ํ๋ฅผ ์ฌ์ฉํ๋ค๋ ๊ฒ์ด๋ค.
ํ๋ก ๋ํ๋ด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
DFS (๊น์ด ์ฐ์ ํ์) | BFS (๋๋น ์ฐ์ ํ์) | |
ํ์ ๋ฐฉ๋ฒ | ์์ ๋ ธ๋ ๊ธฐ์ค ์ต๋ ๊น์ด๊น์ง ๋ฐฉ๋ฌธํ๋ฉด์ ํ์ | ์์ ๋ ธ๋ ๊ธฐ์ค ๊ฐ์ฅ ๊ฐ๊น์ด ๋ ธ๋๋ถํฐ ๋ฐฉ๋ฌธํ๋ฉด์ ํ์ |
๊ตฌํ ๋ฐฉ๋ฒ | ์คํ or ์ฌ๊ทํจ์ | ํ |
์๊ฐ ๋ณต์ก๋ | O(V + E) |
โ ๋ ์ค ์ด๋ ๊ฒ์ ์ฌ์ฉํด์ผ ํ ๊น?
1. ๊ทธ๋ํ์ ๋ชจ๋ ์ ์ ์ ๋ฐฉ๋ฌธํ๋ ๋ฌธ์
DFS, BFS ๋ ๋ค ์ฌ์ฉ ๊ฐ๋ฅ
2. ๊ฒฝ๋ก์ ํน์ง์ ์ ์ฅํด๋์ด์ผ ํ๋ ๋ฌธ์
ex) ๊ฐ ์ ์ ์ ์ซ์๊ฐ ์ ํ์๊ณ a๋ถํฐ b๊น์ง ๊ฐ๋ ๊ฒฝ๋ก๋ฅผ ๊ตฌํ๋๋ฐ ๊ฒฝ๋ก์ ๊ฐ์ ์ซ์๊ฐ ์์ผ๋ฉด ์ ๋๋ค๋ ๋ฌธ์ ๋ฑ, ๊ฐ๊ฐ์ ๊ฒฝ๋ก๋ง๋ค ํน์ง์ ์ ์ฅํด๋ฌ์ผ ํ ๋
DFS ์ฌ์ฉ (BFS๋ ๊ฒฝ๋ก์ ํน์ง์ ๊ฐ์ง์ง ๋ชปํ๋ค)
3. ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ ๋ฌธ์
ex) ๋ฏธ๋ก ์ฐพ๊ธฐ ๋ฑ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํด์ผ ํ ๋
BFS ์ฌ์ฉ
(DFS๋ก ๊ฒฝ๋ก๋ฅผ ๊ฒ์ํ ๊ฒฝ์ฐ ์ฒ์์ผ๋ก ๋ฐ๊ฒฌ๋๋ ํด๋ต์ด ์ต๋จ๊ฑฐ๋ฆฌ๊ฐ ์๋ ์ ์๋ค. ๋ฐ๋ฉด, BFS๋ ํ์ฌ ๋ ธ๋๋ถํฐ ๊ฐ๊น์ด ๊ณณ๋ถํฐ ์ฐพ๊ธฐ ๋๋ฌธ์ ๊ฒฝ๋ก ํ์ ์ ๋จผ์ ์ฐพ์์ง๋ ํด๋ต์ด ๊ณง ์ต๋จ๊ฑฐ๋ฆฌ์ด๋ค.)
๐ ๊ฒ์ ๋์ ๊ทธ๋ํ๊ฐ ํด ๋ -> DFS ๊ณ ๋ ค
๐ ๊ฒ์ ๋์์ ๊ท๋ชจ๊ฐ ํฌ์ง ์๊ณ , ๊ฒ์ ์์ ์ง์ ์ผ๋ก๋ถํฐ ์ํ๋ ๋์์ด ๋ฉ์ง ์์ ๋ -> BFS ๊ณ ๋ ค
Binary Search (์ด์ง ํ์)
Binary Search(์ด์ง ํ์)์ ๋ฐ์ดํฐ๊ฐ ์ ๋ ฌ๋์ด ์๋ ์ํ์์ ์ํ๋ ๊ฐ์ ์ฐพ์๋ด๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
๋ฐ์ดํฐ์ ์ค์๊ฐ๊ณผ ์ฐพ๊ณ ์ ํ๋ ๊ฐ์ ๋น๊ตํ์ฌ ๋ฐ์ดํฐ์ ํฌ๊ธฐ๋ฅผ ์ ๋ฐ์ฉ ์ค์ด๋ฉด์ ์ํ๋ ๊ฐ์ ์ฐพ๋๋ค.
์ ๋ ฌ ๋ฐ์ดํฐ์์ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ํ์ํ ๋ ์ฌ์ฉํ๋ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
๊ตฌํ ๋ฐ ์๋ฆฌ๊ฐ ๋น๊ต์ ๊ฐ๋จํ๊ธฐ ๋๋ฌธ์, ์ฝ๋ฉํ ์คํธ์์๋ ์ฃผ๋ก ๋ถ๋ถ ๋ฌธ์ ๋ก ์๊ตฌํ๋ ์์ญ์ด๋ค.
์๊ฐ ๋ณต์ก๋
O(logN)
์ด์งํ์์ log(N)๋ฒ์ ์ฐ์ฐ์ผ๋ก ์ํ๋ ๋ฐ์ดํฐ์ ์์น๋ฅผ ์ฐพ์ ์ ์๋ค.
ํ์ง๋ง ์ด์งํ์์ ๋ฐ๋์ ๋ฐ์ดํฐ๊ฐ ์ ๋ ฌ๋์ด ์๋ ์ํ์ฌ์ผ ํ๋ค๋ ๊ฒ์ ์ฃผ์ํ์!
Reference
'Java > ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ] ๊ตฌ๊ฐ ํฉ (0) | 2024.01.29 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] ๋ฐฐ์ด๊ณผ ๋ฆฌ์คํธ (0) | 2024.01.29 |
[์๊ณ ๋ฆฌ์ฆ] ์๊ฐ ๋ณต์ก๋ (1) | 2024.01.29 |