Algo-dfs-bfs.md
Before DFS/BFS...
Stack
LIFO์ ํํ๋ฅผ ๊ฐ์ง๋ ์๋ฃ๊ตฌ์กฐ Stack-TIL-Link
Queue
FIFO์ ํํ๋ฅผ ๊ฐ์ง๋ ์๋ฃ๊ตฌ์กฐ Queue-TIL-Link
Recursive Function
์๊ธฐ ์์ ์ ๋ค์ ํธ์ถํ๋ ํจ์
RecursionError: maximum recursion depth exceeded while calling a Python object
Python์์๋ ์ฌ๊ท ์ ํ ๊น์ด๋ฅผ ๋์ด ํจ์๊ฐ ์ผ์ ํ์ ์ด์ ์ฌ๊ท์ ์ผ๋ก ํธ์ถ๋๋ค๋ฉด RecursionError๊ฐ ๋ฐ์ํ๋ค.
์ฌ๊ทํจ์๋ฅผ ๋ฌธ์ ํ์ด์์ ์ฌ์ฉํ ๋์๋ ์ข ๋ฃ์กฐ๊ฑด์ ๋ฐ๋์ ๋ช ์ํด์ผ ํ๋ค.
ํฉํ ๋ฆฌ์ผ ๊ตฌํ ์์
๐ก ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ - GCD ๊ณ์ฐ
GCD: Greatest Common Divisor - ์ต๋๊ณต์ฝ์
๋ ์์ฐ์ A, B์ ๋ํ์ฌ (A > B) A๋ฅผ B๋ก ๋๋ ๋๋จธ์ง๋ฅผ R์ด๋ผ๊ณ ํ๋ค๋ฉด A์ B์ ์ต๋๊ณต์ฝ์๋ B์ R์ ์ต๋๊ณต์ฝ์์ ๊ฐ๋ค.
์ด์ฒ๋ผ ์ฌ๊ทํจ์๋ฅผ ์ ํ์ฉํ๋ฉด ๋ณต์กํ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ๊ฒฐํ๊ฒ ์์ฑํ ์ ์๋ค.
ํ์ง๋ง ๊ฐ๋ ์ฑ์๋ ์ฝ๋๋ฅผ ์ง๊ธฐ์๋ ์ข์ง ์์ ๋ฐฉ๋ฒ์ด๊ธฐ๋๋ฌธ์ ์ํฉ์ ๋ง์ถ์ด ์ ์ฌ์ฉํ์
DFS - Depth-First Search
โ ๊น์ด ์ฐ์ ํ์ ํ์ฌ ์ ์ ๊ณผ ์ฐ๊ฒฐ๋(์ธ์ ํ) ์ ์ ๋ค์ ๊ฐ ์ ์๋์ง ๊ฒ์ฌํ๊ณ , ํน์ ์ ์ ์ผ๋ก ๊ฐ ์ ์๋ค๋ฉด ๊ทธ ์ ์ ์ ๊ฐ์ ๊ฐ์ ํ์๋ฅผ ๋ฐ๋ณตํ๋ ํ์ ์๊ณ ๋ฆฌ์ฆ
์ฅ์
์ง๊ด์ ์ด๊ณ ๊ตฌํํ๊ธฐ ์ฌ์
๊ฐ์ ์ ์ ์ ๋ฐ๋ณตํ์ง ์๋๋ก ์ ์ ์ ๋ฐฉ๋ฌธํ๋ค๋ ๊ฒ์ ํ์ํด์ค๋ค.
์ฌ๊ทํจ์๋ฅผ ํตํด ๊ตฌํํ๋ค.
๋จ์
์ฌ๊ทํจ์๋ฅผ ์ด์ฉํ๊ธฐ ๋๋ฌธ์, ํจ์ ํธ์ถ ๋น์ฉ์ด ์ถ๊ฐ๋ก ๋ค์ด๊ฐ๋ค.
์ฌ๊ท ๊น์ด๊ฐ ์ง๋์น๊ฒ ๊น์ด์ง๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋น์ฉ์ ์์ธกํ๊ธฐ ์ด๋ ต๋ค.
์ฌ๊ท๋ฅผ ํ ๋๋ง๋ค ํธ์ถ๋ ํจ์์ ์๋งํผ ์คํ๋ฉ๋ชจ๋ฆฌ์ ์์ด๊ฒ ๋๋๋ฐ ์ฌ๊ท ๊น์ด๊ฐ ๊น์ด์ง๋ค๋ฉด ์คํ๋ฉ๋ชจ๋ฆฌ์ ์์ด๋ ์์ด ๋น๋ก์ ์ผ๋ก ๋ง์์ ธ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํํ๊ณ ํฐ์ง ์๋ ์๋ค.
์ต๋จ ๊ฒฝ๋ก๋ฅผ ์ ์ ์๋ค.
BFS - Breadth First Search
โ ๋๋น ์ฐ์ ํ์ ์์์ ์์ ๊ฐ๊น์ด ์ ์ ๋ถํฐ ์์๋๋ก ๋ฐฉ๋ฌธํ๋ ํ์ ์๊ณ ๋ฆฌ์ฆ
์ฅ์
ํจ์จ์ ์ธ ์ด์ ๊ฐ๋ฅ
์๊ฐ/๊ณต๊ฐ ๋ณต์ก๋ ๋ฉด์์ ์์ ์
๊ฐ์ ์ ๋น์ฉ์ด ๋ชจ๋ ๊ฐ์ ๊ฒฝ์ฐ, ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ตฌํ ์ ์๋ค.
๊ฐ์ ์ ๋น์ฉ์ด ๊ฐ๋ค? ๋ฌธ์ ์ ์กฐ๊ฑด์์ ๊ฒฝ๋ก๋ง๋ค ๋น์ฉ์ด ๋ค๋ฅด๊ฒ ์ฃผ์ด์ง๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ฐ ์ด๋ฐ ๊ฒฝ์ฐ์๋ ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ ๋ฑ์ ์ต๋จ๊ฑฐ๋ฆฌ ์๊ณ ๋ฆฌ์ฆ์ ํ์ฉํด์ผ ํ๋ค.
๋จ์
DFS์ ๋นํด ์ฝ๋ ๊ตฌํ์ด ์ด๋ ต๋ค.
๋ชจ๋ ์ง์ ์ ํ์ํ ๊ฒฝ์ฐ๋ฅผ ๋๋นํด, ํ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ฏธ๋ฆฌ ์ค๋น๋์ด ์์ด์ผ ํ๋ค.
DFS vs BFS
๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ => ๊ธฐ๋ณธ์ ์ผ๋ก ๋๋ ๋ฉ๋ชจ๋ฆฌ ๋น์ฉ์ BFS๊ฐ ๋ง์ง๋ง, DFS๋ ์์ธ์ ์ธ ์ํฉ์์ ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ ๋น์ฉ์ด ๋ ๋ค.
Last updated