DFS

  • Depth-First Search
  • ๊ทธ๋ž˜ํ”„ ์™„์ „ ํƒ์ƒ‰ ๊ธฐ๋ฒ• ์ค‘ ํ•˜๋‚˜
  • ์‹œ์ž‘ ๋…ธ๋“œ์—์„œ ์ถœ๋ฐœ โ†’ ํ•œ์ชฝ ๋ถ„๊ธฐ๋ฅผ ์ •ํ•˜๊ณ  โ†’ ์ตœ๋Œ€ ๊นŠ์ด๊นŒ์ง€ ํƒ์ƒ‰ โ†’ ์ดํ›„ ๋‹ค๋ฅธ ๋ถ„๊ธฐ๋กœ ์ด๋™ํ•˜์—ฌ ํƒ์ƒ‰
  • ์žฌ๊ท€ ํ•จ์ˆ˜ or ์Šคํƒ ์ด์šฉ
  • FILO ํƒ์ƒ‰
  • ํ•œ ๋ฒˆ ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ๋Š” ๋‹ค์‹œ ๋ฐฉ๋ฌธ X โ†’ ๋ฐฉ๋ฌธ ์—ฌ๋ถ€ ์ฒดํฌ ๋ฐฐ์—ด ํ•„์š”
  1. ์‹œ์ž‘ํ•  ๋…ธ๋“œ๋ฅผ ์ •ํ•œ ํ›„, ์‚ฌ์šฉํ•  ์ž๋ฃŒ๊ตฌ์กฐ ์ดˆ๊ธฐํ™”
    • ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋กœ ๊ทธ๋ž˜ํ”„ ์ƒ์„ฑ
    • visit ๋ฐฐ์—ด ์ดˆ๊ธฐํ™”, ์‹œ์ž‘ ๋…ธ๋“œ ๋ฐฉ๋ฌธ ์ฒดํฌ
    • ์Šคํƒ์— ์‹œ์ž‘ ๋…ธ๋“œ push
  2. ์Šคํƒ์—์„œ ๋…ธ๋“œ๋ฅผ ๊บผ๋‚ธ ํ›„, ๋…ธ๋“œ์˜ ์ธ์ ‘ ๋…ธ๋“œ๋ฅผ ๋‹ค์‹œ ์Šคํƒ์— ์‚ฝ์ž…
    • ์Šคํƒ์—์„œ ๋…ธ๋“œ๋ฅผ pop โ†’ ํƒ์ƒ‰ ์ˆœ์„œ์— ๊ธฐ๋ก
    • ๊บผ๋‚ธ ๋…ธ๋“œ์˜ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ฐธ๊ณ  โ†’ ๋ฏธ๋ฐฉ๋ฌธ ๋…ธ๋“œ๋ผ๋ฉด, ์ธ์ ‘ ๋…ธ๋“œ๋ฅผ ์Šคํƒ์— ์‚ฝ์ž…
    • ์‚ฝ์ž…ํ•œ ์ธ์ ‘ ๋…ธ๋“œ๋“ค์˜ ๋ฐฉ๋ฌธ ์—ฌ๋ถ€ ์ฒดํฌ
  3. ์Šคํƒ์ด ๋น„์–ด์žˆ์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
DFS๋ฅผ ์งœ๋Š” ํŒจํ„ด
- ์ „์—ผ๋ณ‘, ๋ฐ”์ด๋Ÿฌ์Šค ๋“ฑ์—์„œ ์ด "๋ช‡๊ฐœ"์˜ ๋…ธ๋“œ๋ฅผ ๊ฐ์—ผ์‹œํ‚ค๋ƒ๋Š” DFS์ž„
    - ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๊ฐ์—ผ์‹œํ‚ค๊ธฐ ์œ„ํ•œ "์ด ์‹œ๊ฐ„"์„ ๋ฌผ์—ˆ์œผ๋ฉด BFS (์ตœ๋‹จ๊ฑฐ๋ฆฌ)
 

BFS

  • Breadth-First-Search
  • ์‹œ์ž‘ ๋…ธ๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ โ†’ ๊ฐ€๊นŒ์šด ๋…ธ๋“œ๋ฅผ ๋จผ์ € ๋ฐฉ๋ฌธ
  • FIFO ํƒ์ƒ‰ โ†’ ํ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„
  • ๊ฐ€๊นŒ์šด ๋…ธ๋“œ๋ถ€ํ„ฐ ํƒ์ƒ‰ โ†’ ๋ชฉํ‘œ ๋…ธ๋“œ์— ๋„์ฐฉํ•˜๋Š” ๊ฒฝ๋กœ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์ผ ๋•Œ โ†’ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๋ณด์žฅ
  1. ์‹œ์ž‘ํ•  ๋…ธ๋“œ๋ฅผ ์ •ํ•œ ํ›„, ์‚ฌ์šฉํ•  ์ž๋ฃŒ๊ตฌ์กฐ ์ดˆ๊ธฐํ™”
    • ๊ทธ๋ž˜ํ”„ โ†’ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋กœ ํ‘œํ˜„
    • visit ๋ฐฐ์—ด ์ดˆ๊ธฐํ™”, ์‹œ์ž‘ ๋…ธ๋“œ ๋ฐฉ๋ฌธ ์ฒดํฌ
    • ํƒ์ƒ‰์„ ์œ„ํ•˜์—ฌ ํ๋ฅผ ์‚ฌ์šฉ โ†’ ์‹œ์ž‘์  push
  2. ํ์—์„œ ๋…ธ๋“œ๋ฅผ ๊บผ๋‚ธ ํ›„, ๊บผ๋‚ธ ๋…ธ๋“œ์˜ ์ธ์ ‘ ๋…ธ๋“œ๋ฅผ ๋ชจ๋‘ ํ์— ์‚ฝ์ž…
    • ํ์—์„œ ๋…ธ๋“œ๋ฅผ ๊บผ๋‚ด๋ฉด์„œ โ†’ ํƒ์ƒ‰ ์ˆœ์„œ์— ๊บผ๋‚ธ ๋…ธ๋“œ๋ฅผ ๊ธฐ๋ก
    • ๊บผ๋‚ธ ๋…ธ๋“œ์˜ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ฐธ๊ณ  โ†’ ๋ฏธ๋ฐฉ๋ฌธ ๋…ธ๋“œ๋ผ๋ฉด, ์ธ์ ‘ ๋…ธ๋“œ๋“ค์„ ํ์— ์‚ฝ์ž…
    • ์‚ฝ์ž…ํ•œ ์ธ์ ‘ ๋…ธ๋“œ๋“ค์˜ ๋ฐฉ๋ฌธ ์—ฌ๋ถ€ ์ฒดํฌ
  3. ํ๊ฐ€ ๋น„์–ด์žˆ์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
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[ํŠน์ •์ข…์ ] ์ถœ๋ ฅ