DFS
- Depth-First Search
- ๊ทธ๋ํ ์์ ํ์ ๊ธฐ๋ฒ ์ค ํ๋
- ์์ ๋
ธ๋์์ ์ถ๋ฐ โ ํ์ชฝ ๋ถ๊ธฐ๋ฅผ ์ ํ๊ณ โ ์ต๋ ๊น์ด๊น์ง ํ์ โ ์ดํ ๋ค๋ฅธ ๋ถ๊ธฐ๋ก ์ด๋ํ์ฌ ํ์
- ์ฌ๊ท ํจ์ or ์คํ ์ด์ฉ
- FILO ํ์
- ํ ๋ฒ ๋ฐฉ๋ฌธํ ๋
ธ๋๋ ๋ค์ ๋ฐฉ๋ฌธ X โ ๋ฐฉ๋ฌธ ์ฌ๋ถ ์ฒดํฌ ๋ฐฐ์ด ํ์
- ์์ํ ๋
ธ๋๋ฅผ ์ ํ ํ, ์ฌ์ฉํ ์๋ฃ๊ตฌ์กฐ ์ด๊ธฐํ
- ์ธ์ ๋ฆฌ์คํธ๋ก ๊ทธ๋ํ ์์ฑ
- visit ๋ฐฐ์ด ์ด๊ธฐํ, ์์ ๋
ธ๋ ๋ฐฉ๋ฌธ ์ฒดํฌ
- ์คํ์ ์์ ๋
ธ๋ push
- ์คํ์์ ๋
ธ๋๋ฅผ ๊บผ๋ธ ํ, ๋
ธ๋์ ์ธ์ ๋
ธ๋๋ฅผ ๋ค์ ์คํ์ ์ฝ์
- ์คํ์์ ๋
ธ๋๋ฅผ pop โ ํ์ ์์์ ๊ธฐ๋ก
- ๊บผ๋ธ ๋
ธ๋์ ์ธ์ ๋ฆฌ์คํธ๋ฅผ ์ฐธ๊ณ โ ๋ฏธ๋ฐฉ๋ฌธ ๋
ธ๋๋ผ๋ฉด, ์ธ์ ๋
ธ๋๋ฅผ ์คํ์ ์ฝ์
- ์ฝ์
ํ ์ธ์ ๋
ธ๋๋ค์ ๋ฐฉ๋ฌธ ์ฌ๋ถ ์ฒดํฌ
- ์คํ์ด ๋น์ด์์ ๋๊น์ง ๋ฐ๋ณต
DFS๋ฅผ ์ง๋ ํจํด
- ์ ์ผ๋ณ, ๋ฐ์ด๋ฌ์ค ๋ฑ์์ ์ด "๋ช๊ฐ"์ ๋
ธ๋๋ฅผ ๊ฐ์ผ์ํค๋๋ DFS์
- ๋ชจ๋ ๋
ธ๋๋ฅผ ๊ฐ์ผ์ํค๊ธฐ ์ํ "์ด ์๊ฐ"์ ๋ฌผ์์ผ๋ฉด BFS (์ต๋จ๊ฑฐ๋ฆฌ)
BFS
- Breadth-First-Search
- ์์ ๋
ธ๋๋ฅผ ๊ธฐ์ค์ผ๋ก โ ๊ฐ๊น์ด ๋
ธ๋๋ฅผ ๋จผ์ ๋ฐฉ๋ฌธ
- FIFO ํ์ โ ํ๋ฅผ ์ด์ฉํ์ฌ ๊ตฌํ
- ๊ฐ๊น์ด ๋
ธ๋๋ถํฐ ํ์ โ ๋ชฉํ ๋
ธ๋์ ๋์ฐฉํ๋ ๊ฒฝ๋ก๊ฐ ์ฌ๋ฌ ๊ฐ์ผ ๋ โ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๋ณด์ฅ
- ์์ํ ๋
ธ๋๋ฅผ ์ ํ ํ, ์ฌ์ฉํ ์๋ฃ๊ตฌ์กฐ ์ด๊ธฐํ
- ๊ทธ๋ํ โ ์ธ์ ๋ฆฌ์คํธ๋ก ํํ
- visit ๋ฐฐ์ด ์ด๊ธฐํ, ์์ ๋
ธ๋ ๋ฐฉ๋ฌธ ์ฒดํฌ
- ํ์์ ์ํ์ฌ ํ๋ฅผ ์ฌ์ฉ โ ์์์ push
- ํ์์ ๋
ธ๋๋ฅผ ๊บผ๋ธ ํ, ๊บผ๋ธ ๋
ธ๋์ ์ธ์ ๋
ธ๋๋ฅผ ๋ชจ๋ ํ์ ์ฝ์
- ํ์์ ๋
ธ๋๋ฅผ ๊บผ๋ด๋ฉด์ โ ํ์ ์์์ ๊บผ๋ธ ๋
ธ๋๋ฅผ ๊ธฐ๋ก
- ๊บผ๋ธ ๋
ธ๋์ ์ธ์ ๋ฆฌ์คํธ๋ฅผ ์ฐธ๊ณ โ ๋ฏธ๋ฐฉ๋ฌธ ๋
ธ๋๋ผ๋ฉด, ์ธ์ ๋
ธ๋๋ค์ ํ์ ์ฝ์
- ์ฝ์
ํ ์ธ์ ๋
ธ๋๋ค์ ๋ฐฉ๋ฌธ ์ฌ๋ถ ์ฒดํฌ
- ํ๊ฐ ๋น์ด์์ ๋๊น์ง ๋ฐ๋ณต
BFS๋ฅผ ์ง๋ ํจํด
- ์ฐ์ ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ๋ฌป๋ ๋ฌธ์ ๋ ๋๋ถ๋ถ DFS์
- distance ๋ฐฐ์ด๊ณผ visited ๋ฐฐ์ด์ ํ๋๋ก ํฉ์ณ์ ๊ด๋ฆฌํ๋ฉด ์ข์
- visited๋ฅผ [-1]๋ก ์ด๊ธฐํ, ์ฌ๊ธฐ์ ์์ ๋
ธ๋ index ์์น๋ฅผ [0]์ผ๋ก ์ค์ ํ๋ฉด
- visited, distance ๋ชจ๋ ์ฒดํฌ ๊ฐ๋ฅ
- queue.pop(), queue.appendleft()
1. ์์, ์ข
์ ์
๋ ฅ
2. visited ๋ฐฐ์ด, queue ์ด๊ธฐํ
3. visited ๋ฐฐ์ด์ ์์์ ์ ์ฉ, queue ์ ์์์ append
4. BFS ์์
- ๋ชจ๋ ๋
ธ๋๋ฅผ "๊ทธ๋ฅ ๋ค ๋ฐฉ๋ฌธ"์ด๋ฉด while queue: ๋ก ์กฐ๊ฑด์ ์ก์ผ๋ฉด ๋จ
- "ํน์ ์ข
์ ๊น์ง ๋๋ฌ"์ด๋ฉด while visited[ํน์ ์ข
์ ]==-1: ๋ก ์ก์ผ๋ฉด ๋จ
4-1. queue.popํด์ cur์ ์ ์ฅ
4-2. ๊ฐ ์ ์๋ ๋ฐฉํฅ์ ๋ค ๋ฐ๋ณต๋ฌธ ๋๋ฉด์ ํ์ธ
- ์๋ก์ด ์์น๋ฅผ nx๋ผ๊ณ ํ๋ฉด, nx=cur+dir[i]
- nx๊ฐ ์ ํจํ ๋ฒ์(๋ฐ๋์ ํ์ํ ๋ฒ์) ์์ ์๋์ง ์ฒดํฌ, ์๋๋ผ๋ฉด continue
- position[nx]>0 ์ด๋ฉด continue (์ด๋ฏธ ๋ฐฉ๋ฌธํ๊ฑฐ๋, ๋ฐฉ๋ฌธ ์์ ์ธ ๋
ธ๋์ธ์ง ์ฒดํฌ)
- nx ์ ํจ ๋ฒ์๋ฅผ ๋จผ์ ์ฒดํฌํด์ผ nx index ์์น์ position ์ ๋ฐฉ๋ฌธํ ๋ out of index ์ค๋ฅ ์ ๋จ
- ์ ์กฐ๊ฑด ๋ชจ๋ ์ถฉ์กฑํ์ผ๋ฉด, <์ ํจ ๋ฒ์ ๋ด> + <์์ง ๋ฐฉ๋ฌธ X> ์ด๋ฏ๋ก queue.append
5. ์ต์ข
์ ์ผ๋ก ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ์ถ๋ ฅ
- "๊ทธ๋ฅ ๋ค ๋ฐฉ๋ฌธ" -> visited ๋ฐฐ์ด์ ๋๋ฉด์ max ๊ฐ ๋ฝ๊ณ , ์ถ๋ ฅ
- "ํน์ ์ข
์ " -> visited[ํน์ ์ข
์ ] ์ถ๋ ฅ