โซ๏ธ ์๋ชป๋ ๋ฐฉํฅ
์์ฆ BFS์ DFS ๋ฌธ์ ๋ฅผ ํ๊ณ ์๋ค. ๋น๊ต์ ์ต๊ทผ์ ํ์๋ ๋ฌธ์ ์ค 'ํ๋ก๊ทธ๋๋จธ์ค ํ๊ฒ๋๋ฒ'๋ฅผ ํ๋ฉด์ ํ์ด๋ฅผ ์์ฑํ๊ณ , ๋ด๊ฐ ๊ณ ๋ฏผํด์จ ๊ณผ์ ์ ๋ธ๋ก๊ทธ์ ๋จ๊ฒผ๋๋ฐ ์ด ๊ธ์ ๋ณธ ์น๊ตฌ์๊ฒ ์ฐ๋ฝ์ด ์๋ค.
์น๊ตฌ๊ฐ ๋ณธ์ธ์ด ์ด ๋ฌธ์ ์ BFS.DFS์ ๋ํ ๋ฌธ์ ํ์ด ๋ฐฉ์์ ์ ๋ฆฌํด์ค Notion ํ์ด์ง๋ ๋ณด๋ด์คฌ๋ค. ์ด๋ํ๋๋ผ ์นดํก์ ์กฐ๊ธ ๋ฆ๊ฒ ํ์ธํ๋๋ฐ ์น๊ตฌ๊ฐ ์ด๊ฑด ํผ์ ์๊ฐํ ๊ฒ ์๋๋ผ๋ฉฐ ํตํ๋ฅผ ํ๋ฉฐ ์๋ ค์ค๋ค๊ณ ํ๋ค. ์ผ๋จ,,, ๋๋ฆ ๋ฌธ์ ๋ฅผ ํ๊ณ '์ํ์๋ค!'ํ๊ณ ๋๋๋ ์ํฉ์ด์๋๋ฐ, ์ด๋ค ๋ฐฉํฅ์ผ๋ก ์๋ชปํ๋ฌ๊ฐ๊ณ ์๋์ง ๊ถ๊ธํด์ ์ผ๋ฅธ ์ป๊ณ ์น๊ตฌ์๊ฒ ์ฐ๋ฝ์ํ๋ค.
โซ๏ธ ๋ฌธ์ ์ ํฌ์คํ
https://didu-story.tistory.com/420
์ด ๋ฌธ์ ๋ฅผ ํ๋ฉด์, '์๊ฐ๋ณต์ก๋'์ ๋ํ ๊ณ ๋ฏผ์ ์กฐ๊ธ ๊น๊ฒ ํด๋ดค๋ค. ์๊ฐ๋ณต์ก๋์ ๋ํด์ ๊ณ ๋ฏผํ ๋๋ ์น๊ตฌ์ ์ด์ผ๊ธฐ๋ฅผ ๋๋ด์๊ณ , ์น๊ตฌ๊ฐ ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ , ์๊ฐ๋ณต์ก๋๋ฅผ ์ด๋ป๊ฒ ์๊ฐํด์ผํ๋์ง ์กฐ์ธํด์ฃผ์๋ค. ์น๊ตฌ์ ๋ง๋ก๋, ๋ด๊ฐ ์๊ฐ๋ณต์ก๋ ํด๊ฒฐ์ ํ์ง๋ง, ์๊ฐ๋ณต์ก๋๋ฅผ ํด๊ฒฐํ๊ณ ๋์ ์๊ณ ๋ฆฌ์ฆ์ด ๋ฌ๋ผ์ก๋๋ฐ ๊ทธ ๊ฒ์ ์ ํ ์ธ๊ธํด์ฃผ์ง ์์๊ณ , ๊ทธ๋ฆฌ๊ณ ์ ์ด์ ์๊ณ ๋ฆฌ์ฆ์ ๋ ์ฌ๋ฆฐ ๋ฐฉ์๋ถํฐ๊ฐ ์๋ชป๋๋ค๊ณ ํ๋ค.
์์ ์ ํฌ์คํ ์ ์บก์ณํด์๋๋ฐ, ์ด๋ค ๋ถ๋ถ์ด ๋ด๊ฐ ๊ฐ๋ ์ด ์๋ชป์กํ์์๊น?
์ ์บก์ณ๋ณธ์์ ๋๋๊ทธ ํด๋ ๊ณณ์ ๋ณด๋ฉด ๋ด๊ฐ ์ด๋ ๊ฒ ์จ๋จ๋ค. ๊ฒฐ๊ตญ, ์ด ๋ฌธ์ ๋ '๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ํ์, ์ฆ ์์ ํ์'์ ํด์ผํ๊ธฐ ๋๋ฌธ์ BFS์๊ณ ๋ฆฌ์ฆ์ ์ฑํํ๋ค๊ณ ํ๋ค. ๊ทธ๋ผ, BFS๋ ๋ญ๊น?
https://github.com/HotCodeBreakers/CodingTest/discussions/25
์ฌ๊ธฐ์ ๋ด๊ฐ ์์ฃผ ์ ์ ๋ฆฌํด๋จ๋ฏ, queue๋ฅผ ์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ฉฐ, ์ต๋จ๊ฒฝ๋ก๋ฅผ ์ฐพ์๋ ์ฃผ๋ก ์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ, ๊ทธ๋ฆฌ๊ณ ์ธ์ ํ ๋ ธ๋๋ฅผ ๋ชจ๋ ๋ฐฉ๋ฌธํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
โซ๏ธ ์์ ํ์? BFS?
โ ๏ธ ์ฌ๊ธฐ์ ๋ด๊ฐ ์ฐฉ๊ฐํ ๊ฒ ๊ฐ๋ค. '์ธ์ ํ ๋ ธ๋๋ฅผ ๋ชจ๋ ๋ฐฉ๋ฌธํ๋ค.'๋ผ๋ ๊ฒ ๋๋ฌธ์, ์์ ํ์์ ํ๊ธฐ ์ํด์๋ BFS๊ฐ ํ์ํ๊ตฌ๋? ์ถ์๋ ๊ฒ์ด๋ค. ํ์ง๋ง, ์์ ํ์์ ํ๋ ๋ฐฉ์์๋ ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค. ์ธํฐ๋ท์ ๋์ถฉ๋ง ์ณ๋ด๋, ์์ ํ์์ ํ๋ ๋ฐฉ์์๋
- ๋ธ๋ฃจํธํฌ์ค ๊ธฐ๋ฒ (๋ฐ๋ณต๋ฌธ๊ณผ ์กฐ๊ฑด๋ฌธ์๋ก ๋ชจ๋ ํ ์คํธ)
- ์์ด
- ์ฌ๊ท
- ๋นํธ๋ง์คํฌ (2์ง์ ํํ๊ธฐ๋ฒ ์ฌ์ฉ)
- BFS
- DFS
์ด๋ ๊ฒ๋ ๋ง์ ์์ ํ์ ๋ฐฉ๋ฒ์ด ์๋ค. BFS๋ ์์ ํ์์ ํ ์ ์๋ ์๊ณ ๋ฆฌ์ฆ์ค ํ๋์ผ ๋ฟ์ด์ง, ์์ ํ์ = BFS ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํด์ผ์ง! ํ๋ ์๊ฐ์ ํ๋ฆ์ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ฅผ ํ ๋ ๋ง์ง ์๋ค. ๋ฌผ๋ก , ์์ ํ์์ ์ํ ํ๊ฐ์ง์ ๋ฐฉ๋ฒ์ค ํ๋๊ฐ BFS๊ฒ ์ง!
โช๏ธ BFS๋ก ์์ ํ์์ ํ๊ธฐ ์ํด์๋, ์์ฃผ ์ข์ ์ฑ๋ฅ์ ํ๊ฐ ํ์ํ๋ค. O(1)์ง๋ฆฌ ํ..!
ํ์ง๋ง BFS๋ก ์์ ํ์์ ๊ตฌํํ๋ ๊ฒ์ ๊ต์ฅํ ์ข์ ์ฑ๋ฅ์ ํ๊ฐ ์์ด์ผํ๋ค. ๊ทธ ์ด์ ๋,, BFS๋ ์ธ์ ํ ๋ชจ๋ ๋ ธ๋๋ฅผ ํ์ํ๊ธฐ ์ํด์ queue๋ฅผ ์ฌ์ฉํ๋ค. ์ด๋ ์ฐ์ฐ์ ํ ๋๋ง๋ค ํ ๊ฐ์ฉ popํด์ฃผ๋ ๊ณผ์ ์ด ํ์ํ๋ฐ, ์ด๋ถ๋ถ์์ O(1)์ด ์๋๋ฉด, ์๊ฐ๋ณต์ก๋๋ ๋งค์ฐ๋งค์ฐ ์ปค์ง๊ฒ ๋๋ค.
โช๏ธ ๊ทธ๋ผ, O(1)์ง๋ฆฌ ํ๊ฐ ์์ผ๋ฉด BFS๋ฅผ ์ด์ฉํด์ ์์ ํ์์ ์๋ํด๋ ์ข์๊น?
์,,, ๋ญ ์ฃผ์ด์ง๋ N์ ๊ฐ์๊ฐ ๋๋ฌด ๋ง์ง๋ง ์์ผ๋ฉด ๋์๋ ๊ฐ ๊ฒ์ด๋ค. ๊ทผ๋ฐ ์ด๊ฒ์ ๊ณต๊ฐ๋ณต์ก๋ ์ธก๋ฉด์์ ์๊ฐํด๋ด์ผํ๋ค.
๊ทธ ์ด์ ๋,, BFS๋ ์ธ์ ํ ๋ชจ๋ ๋ ธ๋๋ฅผ ํ์ํ๊ธฐ ์ํด์ queue๋ฅผ ์ฌ์ฉํ๋ค. ๊ฒฐ๊ตญ, ํ๊ฐ์ ๋ ธ๋๋ฅผ ๋ณด๋ฉด์ ๋ค์ ์ธ์ ํ ๋ ธ๋๋ฅผ ๋ชจ๋!!! queue์ ๋ฃ์ด์ฃผ๊ฒ ๋๋๋ฐ ๊ทธ๋ผ,,, ๊ทธ๋ํ๊ฐ ์ปค์ง๋ฉด ์ปค์ง ์๋ก queue์ ๋ค์ด์๋ ๋ฐ์ดํฐ์ ๊ฐฏ์๋,, ์์์ ์ด์ํ ์ ๋๋ก ๋ง์์ง ๊ฒ์ด๋ค.
BFS ์ด๋ ๊ฒ ๋์ํ๋ค. ์์์ผ๋ก ๋๊ฒ ์์ง์ด๋ฉด์ ๋ชจ๋ ๋ ธ๋๋ฅผ ํ์ํ ์ ์๋๋ก ๋์ํ์ฌ '๋๋น ์ฐ์ ํ์'์ด๋ผ๋ ์ด๋ฆ์ด ๋ถ์๋ค. BFS๋ ์ฃผ๋ก ์ด๋ค ๋ฌธ์ ์์ ์ฌ์ฉํ๋ค๊ณ ํ์ง? ๋ฐ๋ก ์ต๋จ ๊ฑฐ๋ฆฌ ํ์์ด๋ค. ๊ทธ ์ด์ ๋ฅผ ํ๊ฐ ๋์ํ๋ ๋ฐฉ์์ ์ดํด๋ณด๋ฉด์ ๋ค์ ์ก์๋ณด์.
- ์ ์ผ ์ฒ์, 0์ด ํ์๋ค์ด๊ฐ๋ค. queue = [0]
- 0๊ณผ ์ธ์ ํ ๋ ธ๋์ธ ๋๊ฐ์ ๋ ธ๋๊ฐ ํ์ ๋ค์ ๋ค์ด๊ฐ๊ฒ ์ง? ๊ทธ๋ฆฌ๊ณ ํ์์ ๋ง์น ๋ ธ๋ 0์ pop๋์ด ๋น ์ง๋ค. queue = [1, 2]
- ๋ค์ ์ผ๋ก ๋ณผ node๋ queue์ ๊ฐ์ฅ ๋จผ์ ๋ค์ด๊ฐ์๋ 1์ด๋ค. 1๊ณผ ์ธ์ ํ ๋ ธ๋๋ฅผ ๋ชจ๋ queue์ ๋ฃ์ด์ฃผ๊ณ , ํ์์ ๋ง์น 1๋ pop๋์ด ๋น ์ง๋ค. queue = [2, 3, 4]
- ๋ค์ pop๋์ด ์ดํด๋ณผ ๋ ธ๋๋2์ด๋ค. 2์ ์ธ์ ํ ๋ ธ๋๋ ๋ชจ๋ queue์ ๋ฃ์ด์ฃผ๊ณ ํ์์ ๋ง์น 2๋ pop๋๋ค. queue = [3, 4, 5, 6]
- ์์ ๊ฐ์ ๋ฐฉ์์ผ๋ก 3, 4, 5, 6์ ๋ชจ๋ ์ดํด๋ณธ๋ค. 3,4,5,6์ ๋ชจ๋ ์ธ์ ํ ๋ ธ๋๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ถ๊ฐ๋ก queue์ append๋์ง ์๊ณ queue๊ฐ ์ ์ฐจ ๋น์์ง๋ค.
์ด๋ ๊ฒ ํ๋ ๋์ํ๋ค. 2^20์ ๊ฒฝ์ฐ์ ์๋ผ๊ณ ์๊ฐํ์ ๋, ํ์๋ ์ต์ ์ ๊ฒฝ์ฐ 2^20๊ฐ , ์ฆ ํ๋ 100๋ง ๊ฐ ์ด์์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ดํ๊ณ , ์ฒ๋ฆฌํด์ฃผ์ด์ผํ๋ค. ์์ ํ์์ BFS๋ก ํ๋ ๋ฐฉ์์... ๊ณต๊ฐ๋ณต์ก๋ ์ธก๋ฉด์์๋, ์๊ฐ๋ณต์ก๋ ์ธก๋ฉด์์๋ ๊ฒฐ์ฝ ์ข์ ๋ฐฉ๋ฒ์ ์๋ ๊ฒ์ด๋ค.
๐ ๊ทธ๋ผ ์ ํ๋ฅผ ์ฌ์ฉํ๋ BFS ๋ฅผ ์ต๋จ๊ฒฝ๋ก๋ฅผ ์ฐพ์ ๋ ์ฌ์ฉํ ๊น?
๋ณดํต, ์ต๋จ๊ฒฝ๋ก๋ฅผ ์ฐพ์๋๋, cost๊ฐ ์กด์ฌํ๋ค. ์ ๊ทธ๋ฆผ์ ๋ดค์๋, ์์ฐจ์ ์ผ๋ก ๋ชจ๋ ๋ ธ๋๋ฅผ ํ์ํ๊ณ , ์ํ๋ ๋ ธ๋์ ๋๋ฌํ์๋ ํ์์ ๋ฉ์ถ๊ณ , ์ต์ cost๊ฐ ๋๊ฒ ํด์ฃผ๋ฉด๋๋ค. ์ฆ, BFS๋ ๋๊น์ง ๋ชจ๋ ํ์ํ๋ค๊ธฐ ๋ณด๋จ, ์ํ๋ ๋ ธ๋์ ๋๋ฌํ๋ฉด ๋ฉ์ถฐ์ฃผ๋ฉด ๋๋ค.
๋๊น์ง ๋ค ํ์ํ๊ณ ์ต์ ์ฐพ๋๊ฑด? ๋ฌผ๋ก ๋๋ค. BFS๋ ์์ ํ์์ ์ผ์ข ์ด๋ผ๋๊น!????? ๊ทผ๋ฐ, BFS์๊ณ ๋ฆฌ์ฆ์ ์์ ํ์์ผ๋ก ์ด์ฉํ๋๊ฒ์ ์ณ์ง ๋ชปํ ๋ฐฉ๋ฒ์ด๋ค. Swift์ธ์ด๋ก ์๋ฅผ๋ค์ด๋ณด์.
Swift์๋ ํจ์จ์ด ์ข์ ํ๊ฐ ์ ๊ณต๋์ง ์๋๋ค. ์ฆ, Array๋ฅผ ์ฌ์ฉํด์ ์ด๋ฅผ 'ํ์ฒ๋ผ' ์ด์ฉํด์ผํ๋ค. removeFirst()๋ผ๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์! ํ์ง๋ง,, removeFirst()์ ์๊ฐ๋ณต์ก๋๋ O(N)์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๋๋ถ๋ถ์ BFS ๋ด๋ถ์๋ ๋ฐ๋ณต๋ฌธ์ด ๋ฑ์ฅํ๊ฒ ๋๋๋ฐ, ์๊ทธ๋๋ O(N)์ด์์ด ๋๋ ์๊ณ ๋ฆฌ์ฆ์ pop์ ํด์ฃผ๊ธฐ ์ํ ์๊ฐ O(N)์ ๋ ์จ๋ฒ๋ฆฌ๋ ๊ฒ์... ๋งค์ฐ ํจ์จ์ด ๋จ์ด์ง๊ฒ ์ง?
โซ๏ธ ๋ณดํต ์์ ํ์์ ํ ๋๋ DFS๋ฅผ ์ฌ์ฉํ๋ค!
โช๏ธ DFS๋ stack ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ค?? ์ฝ์คํ์ ์๊ฐํด!!
DFS์ ๋ํ ์ด์ผ๊ธฐ๋ฅผ ๋๋๋ฉด์ ๋ ๋ค์ ์๋ก์ด ์ฌ์ค?์ ๊นจ์ฐ์ณค๋ค. ๋ณดํต DFS๋ '์คํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ค'๋ผ๊ณ ์ค๋ช ํ๋ค. stack ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋๊ฑด ์๊ฒ ๋ค... ํ์ง๋ง DFS๊ฐ ๋์ํ๋ ๋ฐฉ์ ์์ฒด๊ฐ Stack ๊ตฌ์กฐ๋ผ๋๊ฑฐ!์ ์ง์คํด์ผํ๋ค.
DFS๋ ๋ณดํต ์ฌ๊ท ํ์ฉํ์ฌ ๊ตฌํ์ ๋ง์ด ํ๋๋ฐ, ์ฌ๊ท๋ผ๋ ๊ฒ ์์ฒด๊ฐ ๋ฐ๋ก ํจ์์ ์ฝ์คํ์ ํจ์๊ฐ ์์ฌ๋๊ฐ๋ ๊ณผ์ ์ด๋๊น stack ๋์๋ฐฉ์์ผ๋ก ๋์ํ๋ ๊ฒ์ด๋ค. ํธํธํธ,,, ์ฝ์คํ๊น์ง๋ ์๊ฐํ์ง ๋ชปํ๋๋ฐ, ์ด์จ๋ stack ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ค๋ณด๋ค๋, ์ฝ์คํ์ ํจ์๊ฐ ์์ธ๋ค๊ณ ์ดํดํ๋๊ฒ dfs๋ฅผ ์ดํด๋ ๋ ๋น ๋ฅธ ๋ฐฉ๋ฒ์ผ ๊ฒ ๊ฐ๋ค. (๊ทธ๋ฆฌ๊ณ ๋ณดํต dfs์ฝ๋๋ ์ฌ๊ท๋ฅผ ๊ณ์ํด์ ๋ถ๋ฌ์ ๊ฒฐ๊ตญ ํด๋ต์ ์ฐพ์๋ด๋ ๋ฐฉ์์ ์ฌ์ฉํ์ง, bfs๊ฐ ํ์ ์ง์ ๋ฐ์ดํฐ๋ฅผ append ํ๋๊ฒ์ฒ๋ผ dfs๋ stack์ ๋ฐ๋ก ๋ง๋ค๊ณ ๊ฑฐ๊ธฐ์ appendํ๋ฉด์ ์ฝ๋๋ฅผ ๊ตฌํํ์ง ์๋๋ค.)
โช๏ธ DFS๋ฅผ ์์ ํ์ํ ๋ ์ฃผ๋ก ์ฌ์ฉํ๋ค?
๐ฌ stack์ ์ฌ์ฉํ๋ ์ด์ , ๋์๋ฐฉ์์ ์ดํด๋ณด๋ฉด ๋ต์ด ๋์จ๋ค.
DFS๋ ์ด๋ ๊ฒ ์์ง์ธ๋ค. ๊ทธ๋ฆผ์ ๋ด๋ ๋ฑ ๋ณด์ธ๋ค์ํผ, '์์ ํ ๋๊น์ง!! ๋ด๋ ค๊ฐ๋ค๊ฐ ๋ค์ ์ฌ๋ผ์ค๊ณ , ๋ค์ ์ฌ๋ผ์ค๊ณ ์ด๋ฐ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค. ํจ์ ์ฝ์คํ์ ์ด๋ป๊ฒ ์์ด๋์ง ์ดํด๋ณด๋ฉด,
- 0 ํจ์ํธ์ถ
- 1 ํจ์ํธ์ถ
- 3 ํจ์ํธ์ถ
- ๋ค์ ์์ผ๋๊น 3์์ return
- ์ฌ๋ผ๊ฐ์ ๋ค์ ๋จ์ผ ๋ ผ๋ 4 ํจ์ํธ์ถ
- 4 return
- ์ฌ๋ผ๊ฐ์ 1 return
- ๋จ์๋ ธ๋ 2 ํจ์ํธ์ถ,,,
์ด๋ฐ์์ผ๋ก ์ฝ์คํ์ ์์ด๊ฒ ๋๋ค. ํจ์๊ฐ ํธ์ถ๋๊ณ return ๋๋ ๊ณผ์ ์ ๋ณด๋ฉด, stack ์๋ฃ๊ตฌ์กฐ์ ๋์ผํ๊ฒ ์์ง์ธ๋ค. (LIFO)
๐ฌ ๊ทธ๋ผ ์ ์์ ํ์ํ ๋ ์ฃผ๋ก BFS๋ณด๋ค๋ DFS๋ฅผ ์ฑํํ ๊น?
func dfs(_ start: Int) {
visited[start] = true
print(start, terminator: " ")
for i in 1..<n+1 {
if visited[i] == false && matrix[start][i] == 1 {
dfs(i)
}
}
}
์ผ๋จ, ์ฌ๊ท๋ฅผ ํ์ฉํ๊ธฐ ๋๋ฌธ์ DFS์์ฒด์ ์๊ฐ๋ณต์ก๋๋ ๊ทธ๋ฆฌ ์์ง ์๋ค. ํ์ง๋ง, ๊ณต๊ฐ๋ณต์ก๋์ ์ธก๋ฉด์์๋ ์ดํด๋ณด์.
- ์์ ๋์ผํ๊ฒ 2^20์ ๊ฒฝ์ฐ์ ์๊ฐ ์กด์ฌํ๋ค๊ณ ์น์.
- dfs๋ deep ํ๊ฒ ๋ด๋ ค๊ฐ๊ธฐ ๋๋ฌธ์, ์ฝ์คํ์ ํจ์๊ฐ ์ต๋,,, 20๊ฐ ์ ๋ ์์ผ ๊ฒ์ด๋ค.
- ์ฐจ๋ก๋๋ก 20๊ฐ๋ฅผ return ํด์ค๊ณ , ๋ค์ ๋ด๋ ค๊ฐ๊ณ , ๋ค์ return ํ๊ณ ์ด๋ฐ ๊ณผ์ ์ ๋ฐ๋ณตํ๊ฒ ์ง?
์ด๋ ๋ฏ, ๊ณต๊ฐ๋ณต์ก๋ ์ธก๋ฉด์์ ๋ดฃ์ ๋ BFS๋ณด๋ค๋ DFS๊ฐ ๋ ์์ ํ์์ ํ ๋ ์ ์ ํ๋ค.
โซ๏ธ ๋ฌธ์ ์ ํฌ์คํ ์ผ๋ก ๋ค์ ๋์๊ฐ์
https://didu-story.tistory.com/420
์ด ํฌ์คํ ์์ ์ ์ด๋์ ์ผ๋ถ๋ถ์ ์บก์ณํด์๋ค. ์ฌ๊ธฐ์ '๋ฐฐ์ด์ ํ์ฒ๋ผ' ์ฌ์ฉํด์ ์๊ฐ์ด๊ณผ๊ฐ ๋ฌ๋ค๊ณ ์ค๋ช ํ๊ณ , ์ด๋ฅผ stack ํ์์ผ๋ก ๋ฐ๊พธ๋๊ฐ ํต๊ณผ๊ฐ ๋์๋ค๊ณ ์ ์ด๋จ๋ค. ๋ง๋๋ง์ด๋ค! ํต๊ณผ๋ ํ์ผ๋๊น.
๊ทผ๋ฐ ์ฌ๊ธฐ์ ๋จ์ง ์๊ฐ๋ณต์ก๋๋ง ๋ฌธ์ ์์๊น? ์๋๋ค. ๋๋ ์ ์ด์, BFS์ DFS์ ๊ฐ๋ ํผ๋ํด์ ์๊ฐํ๊ณ , DFS๋ก ๊ตฌํํด์ผํ๋ ๋ฌธ์ ๋ฅผ BFS๋ก ๊ตฌํํ๊ธฐ ๋๋ฌธ์ ์๊ฐ์ด๊ณผ๊ฐ ๋ ๊ฒ์ด๋ค. ์ด ๊ฐ๋ ์ ๋ฐ๋ก์ก์์ผํ๊ณ ,,, ์ด ๊ฐ๋ ์ ๋ฐ๋ก์ก๊ธฐ ์ํด์ ์น๊ตฌ๊ฐ ๊ธด ์๊ฐ๋์ ์กฐ์ธ์ ํด์ค ๊ฒ์ด๋ค....
๊ฒฐ๊ตญ ๋๋ฒ์งธ ์ ๋ต์ฝ๋๋ฅผ ์ดํด๋ณด๋ฉด, ์ฌ๊ท๋ฅผ ์ฌ์ฉํ์ง ์์์ง๋ง, dfs ๋ฐฉ์์ผ๋ก ๋์๊ฐ๋ค. (stack ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ DFS)
๋๋ ์ด๊ฒ BFS๋ก ํ์๋ค๊ณ ๋ฏฟ๊ณ ํ์์ง๋ง, ์ฌ์ค์ ์๋์๋จ ๊ฒ์ด๋ค!!!!!!
โช๏ธ ๋ด๊ฐ ์ด ๋ฌธ์ ์ ์ ์๋ชป์ ๊ทผํ ๊ฒ์ธ์ง ์ ๋ฆฌํด๋ณด์
1. ์์ ํ์ -> ์, BFS๋ก ํ์ด์ผ์ง! ํ๋ ์๊ฐ์ ํ๋ฆ์ด ์๋ชป๋๋ค. ์์ ํ์์ผ๋ก ํธ๋ ๋ฐฉ์์ค์ ํ๋์ผ ๋ฟ์ด์ง, ์ ํฉํ ๋ฐฉ์์ ์๋๋ค.
2. '์ฝ๋์ ๋ชจ์'์ด BFS๋ผ์ BFS๋ผ๊ณ ๋ฏฟ๊ณ ํ์์ง๋ง, ์ฝ๋๋ฅผ ๋ฏ์ด๋ณด๊ณ ๋์ํ๋ ๋ฐฉ์์ ๋ฏ์ด๋ณด๋, ๋๋ BFS๋ผ๊ณ ์น๊ณ DFS์ฝ๋๋ฅผ ๊ตฌํํ๊ณ ์์๋ค. 'stack' ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ DFS๋ก ๊ฒฐ๊ตญ ๊ตฌํํ ๊ฒ์ด๋ค. ์ฌ๊ธฐ์ ๋ด๊ฐ ์ผ๋ง๋ ๊ฐ๋
์ ํผ๋ํด์ ์ฌ์ฉํ๊ณ ์๊ณ , ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ๋
์ ์ ๋๋ก ์ธ์งํ์ง ์์ ์ฑ๋ก ์ฝ๋๋ฅผ ์ง๊ณ ์์์ ํ์
ํ๋ค.
๐ค ์ก๋ดํ์
์ด์ ์น๊ตฌ์ ์ด ์ด์ผ๊ธฐ์ ๋ํด์ 2์๊ฐ์ ๋ ๋ํ๋ฅผ ๋๋ ๊ฒ ๊ฐ๋ค. + ์ด๊ฒ์ ๊ฒ ๋ด ์ทจ์
๊ณ ๋ฏผ๊ณผ,, ๋ค๋ฅธ ๊ทผํฉํ ํฌ๊น์ง ๊ณ๋ค์์ง๋ง
์ด์จ๋ , ์ด๋ ๊ฒ ์๋ชป๋ ๋ถ๋ถ์ ๋ํด์ ์น๊ตฌ๊ฐ ๋งํด์ฃผ๊ณ , ๋ฐ๋ก์ก์์ค์ ๋๋ฌด ๊ณ ๋ง์ ๋ค. ์ ๊ณต์ ์ด๋ฆฌ์ง ์์ ์ธ๋ด์ฌ์ ์น๊ตฌ๊ฐ ์์ด์ ์ฐธ๋ง๋ก ๋คํ์ด์๋ฌ๊น ^___^
์์ฆ๋ค์ด ์๊ณ ๋ฆฌ์ฆ์ ๋ํด์ ๋ ๊น๊ฒ ๊ณ ๋ฏผํ๋ ์ต๊ด์ด ์๊ธด๊ฒ๊ฐ๋ค. bfs, dfs์ ๊ทธ๋ ๊ตฌ๋, ์์ ๋๋๋๊ฒ ์๋๋ผ, ์ ํ๋ฅผ ์ฌ์ฉํ๊ณ ์ ์คํ์ ์ฌ์ฉํ์ง? ๊ทธ๋ผ ์ด๊ฑฐ ์๊ฐ๋ณต์ก๋๋ ์ด๋ป๊ฒ๋์ง? ๊ณต๊ฐ๋ณต์ก๋๋ ์๊ฐํด์ผํ๋๊ตฌ๋? ๊ทธ๋ผ, ์กฐ๊ฑด์ ์ด๋ป๊ฒ๋์ง? ๋ฑ๋ฑ...
์น๊ตฌ๊ฐ ์ ๋ฆฌํด๋ ๋ ธ์ ์ ๋ณด๋๊น, ์น๊ตฌ๊ฐ ์ผ๋ง๋ ๋ง์ด ๊ณ ๋ฏผ์ ํ๊ณ ๋ณธ์ธ๋ง์ ์ ๋ต์ ์ฐพ์๊ฐ๋์ง.. ๋์ ๋ณด์๊ณ ๋๋ฌด ๋๋จํด๋ณด์๋ค. ๊ทธ๋ฆฌ๊ณ , ์๊ฐ๋ณต์ก๋์ ๋ํ ์ค์์ฑ๋ ๋ค์ ํ๋ฒ ์ธ๊ธํด์คฌ๋๋ฐ, ๋ฐฑ์ค์์ ์ค๋ฒ1 ์ด์, ๊ณจ๋๊น์ง ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด์๋ ๋ด๊ฐ ํ์์ ์ผ๋ก ๊ณ ๋ฏผํด๋ด์ผํ๋ ๋ฌธ์ ๋ค์ธ๊ฒ ๊ฐ๋ค.
๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ , ํญ์ ์กฐ๊ฑด์ ๋จผ์ ์๊ฐํ๊ณ , ์ต์ ์ ๊ฒฝ์ฐ ์ด๋ ํ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋์ง '์ถ์ธก'์ด๋ผ๋ ํ๊ณ ๋ฌธ์ ๋ฅผ ํธ๋ ์ต๊ด์ ๊ธธ๋ฌ์ผ๊ฒ ๋ค. ๊ฒฐ๊ตญ ๊ทธ๋์ผ๋ง, ํฌ๋ฌ๋ฌธ์ ๋ฅผ ๋ง์ถ ์ ์์ ๊ฒ ๊ฐ๋ค. ์ง๊ธ๊น์ง ์๊ฐ๋ณต์ก๋์ ์ค์์ฑ์ ๋ชฐ๋๋ ์ด์ ๋, ๋ฐ๋ก ์ค๋ฒ ๊ทธ ์ธ์ ๋ฆฌ์ ๋ฌธ์ ๋ค์ ํธ๋๋ผ ๊ทธ๋ฌ๋ ๊ฒ ๊ฐ๋ค. ๊ทธ๋ฅ,, ๋ ๋ค ์ฝ๋๋ก ๊ฐ๊ฒจ์ฐ๊ณ ๊ตฌํ๋ง ํ๋ฉด ๋์๊ฐ๋ ๋ฌธ์ ๋ค์ด ๋๋ถ๋ถ์ด์๋ค. ์ ์ด์จ๋ฌ,, ์ง๊ธ ์ด ๊ธ๋ ๋๊ฒ ํก์ค์์คํ๊ฒ ์ ๋ฆฌํ๋๋ฐ ๊ทธ๋ฅ ๋ด๊ฐ ๋จธ๋ฆฟ์์ ๋ ์ค๋ฅด๊ณ , ๊ธฐ์ตํ๊ณ ์ถ์๊ธฐ ๋๋ฌธ์ ํ๊ณ ์ฒ๋ผ ์์ฑํ๋ค. ์์ผ๋ก ๋์ ๊ณ ๋ฏผ์ด ๋ด๊ธด ๋ง์ ๊ธ์ ํฌ์คํ ํด์ ๋ ๋ง์ ์ฌ๋๋ค๊ณผ ๊ฐ๋ฐํ ํฌ๋ฅผ ์งํํด๋ณด๊ณ ์ถ๋ค. ํ์ดํ ๐
์ ๊ทธ๋ฆฌ๊ณ ์น๊ตฌ๊ฐ DFS BFS๋ ๋ชจ๋ฅด๋๋ฐ ํ๋ก์ ํธ๋ ์ํ๋๊ณ ํด์ ใ ใ ใ ใ ใ ใ ใ ใ ใ ๋จธ๋ฆฌํ๋ ๋ง์ ๊ฒ ๊ฐ์๋ค. ๋ง๋ค ๊ธฐ์ด๋ถํฐ ๋ค์ก์์ผ์ง!!!! ์์ผ๋ก ๋ฌธ์ ๋ฅผ ํธ๋๊ฑฐ์์ ๊ทธ์น์ง ์๊ณ , ์๊ณ ๋ฆฌ์ฆ ๊ณต๋ถ์ ๋ ํ์ ์์๋ณผ ์์ ์ด๋ค.