์ด ๋ฌธ์„œ์˜ ์›๋ณธ์€ ์™ธ๋ถ€ ์œ„ํ‚ค์—์„œ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.
DFS์—์„œ ๋„˜์–ด์˜ด
1. ๊ฐœ์š”2. ์ƒ์„ธ3. ์žฅ๋‹จ์ 
3.1. ์žฅ์ 3.2. ๋‹จ์ 
4. DFS ํŠธ๋ฆฌ

1. ๊ฐœ์š”[ํŽธ์ง‘]

Depth First Search. ํ”ํžˆ ์ค„์—ฌ์„œ DFS๋กœ ์“ด๋‹ค. ํ•œ๊ตญ์–ด ํ‘œ๊ธฐ๋Š” ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰.
๊ฑฐ์˜ ํ•ญ์ƒ ๋„“์ด์šฐ์„ ํƒ์ƒ‰(BFS; Breadth First Search)๊ณผ ๋น„๊ต๋˜์–ด ๋‚˜์˜จ๋‹ค.

2. ์ƒ์„ธ[ํŽธ์ง‘]

ํŠธ๋ฆฌ๋‚˜ ๊ทธ๋ž˜ํ”„์—์„œ ํ•œ ๋ฃจํŠธ๋กœ ํƒ์ƒ‰ํ•˜๋‹ค๊ฐ€ ํŠน์ • ์ƒํ™ฉ์—์„œ ์ตœ๋Œ€ํ•œ ๊นŠ์ˆ™ํžˆ ๋“ค์–ด๊ฐ€์„œ ํ™•์ธํ•œ ๋’ค ๋‹ค์‹œ ๋Œ์•„๊ฐ€ ๋‹ค๋ฅธ ๋ฃจํŠธ๋กœ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ ๋ฐฑํŠธ๋ž˜ํ‚น์— ์‚ฌ์šฉํ•œ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์žฌ๊ท€ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•˜์ง€๋งŒ, ๋‹จ์ˆœํ•œ ์Šคํƒ ๋ฐฐ์—ด๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ๋„ ํ•œ๋‹ค. ๊ตฌ์กฐ์ƒ ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋ฅผ ์œ ์˜ํ•ด์•ผ ํ•œ๋‹ค.[1]

๊ฐˆ๋ฆผ๊ธธ์ด ๋‚˜ํƒ€๋‚  ๋•Œ๋งˆ๋‹ค '๋‹ค๋ฅธ ๊ธธ์ด ์žˆ๋‹ค'๋Š” ์ •๋ณด๋งŒ ๊ธฐ๋กํ•˜๋ฉด์„œ ์ž์‹ ์ด ์ง€๋‚˜๊ฐ„ ๊ธธ์„ ์ง€์›Œ๋‚˜๊ฐ„๋‹ค. ๊ทธ๋Ÿฌ๋‹ค ๋ง‰๋‹ค๋ฅธ ๊ณณ์— ๋„๋‹ฌํ•˜๋ฉด ์ง์ „ ๊ฐˆ๋ฆผ๊ธธ๊นŒ์ง€ ๋Œ์•„๊ฐ€๋ฉด์„œ '์ด ๊ธธ์€ ์•„๋‹˜'์ด๋ผ๋Š” ํ‘œ์‹์„ ๋‚จ๊ธด๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๊ฐˆ๋ฆผ๊ธธ์„ ์ˆœ์ฐจ์ ์œผ๋กœ ํƒ์ƒ‰ํ•ด ๋‚˜๊ฐ€๋‹ค ๋ชฉ์ ์ง€๋ฅผ ๋ฐœ๊ฒฌํ•˜๋ฉด ๊ทธ๋Œ€๋กœ ํ•ด๋‹ต์„ ๋‚ด๊ณ  ์ข…๋ฃŒ.

๋‹จ์ˆœ ๊ฒ€์ƒ‰ ์†๋„ ์ž์ฒด๋Š” BFS์— ๋น„ํ•ด์„œ ๋А๋ฆฌ๋‹ค. ํ•˜์ง€๋งŒ ๊ฒ€์ƒ‰์ด ์•„๋‹Œ ํŠธ๋ž˜๋ฒ„์Šค(traverse)๋ฅผ ํ•  ๊ฒฝ์šฐ๋Š” ๋งŽ์ด ์“ฐ์ธ๋‹ค. DFS๋Š” ํŠนํžˆ ๋ฆฌํ”„ ๋…ธ๋“œ์—๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ •๋ ฌ ํŠธ๋ฆฌ ๊ตฌ์กฐ์—์„œ ํ•ญ์ƒ ์ˆœ์„œ๋Œ€๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐฉ๋ฌธํ•œ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. ๋ฐฑํŠธ๋ž˜ํ‚น์— ์‚ฌ์šฉ๋˜๋Š” ์ด์œ ๋„ ๊ณตํ†ต ์ƒ์œ„๋ฅผ ๊ฐ€์ง€๋Š” ์•„๋ž˜ ๋ฆฌํ”„ ๋…ธ๋“œ๋“ค์„ ํ•œ๋ฐฉ์— ์ž˜๋ผ ๋‚ด ๋ฒ„๋ฆฌ๋Š”๊ฒŒ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ž๋™ ๋ฏธ๋กœ ์ƒ์„ฑ์— ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๊ธฐ๋„ ํ•˜๋‹ค. ๋ฐฉํ–ฅ์€ ๋ฌด์ž‘์œ„๋กœ ํ•ด์„œ ๊ณ„์† ๋šซ๋‹ค๊ฐ€ ๋ง‰ํ˜€์„œ ๋ชป ๋šซ์œผ๋ฉด ๋šซ์„ ์ˆ˜ ์žˆ๋Š” ๊ณณ์ด ๋ฐœ๊ฒฌ๋  ๋•Œ๊นŒ์ง€ ๋˜๋Œ์•„๊ฐ€์„œ ๋‹ค์‹œ ๋šซ๊ณ , ๋˜ ๋ง‰ํžˆ๋ฉด ๋˜๋Œ์•„๊ฐ€๊ณ  ์ด๋Ÿฐ ์‹์œผ๋กœ ๋ฌดํ•œํžˆ ๋ฐ˜๋ณตํ•˜๋‹ค ๋ณด๋ฉด ์ƒ๊ธด๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ์ด ๋ฐฉ์‹์œผ๋กœ ๋ฏธ๋กœ๋ฅผ ๋งŒ๋“ค๋ฉด ๋น ์ ธ๋‚˜๊ฐ€๋Š” ๊ฒฝ๋กœ ๋˜ํ•œ ๋‹จ ํ•˜๋‚˜๋งŒ ์ƒ๊ธด๋‹ค. ์ง์ ‘ ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด ์ด ๋™์˜์ƒ์„ ๋ณด์ž.

DFS๋ฅผ ์ž˜๋งŒ ์ด์šฉํ•˜๋ฉด ๋ฐฉํ–ฅ ์žˆ๋Š” ๊ทธ๋ž˜ํ”„์—์„œ ์‚ฌ์ดํด(cycle)์ด ์žˆ๋Š”์ง€ ํŒ๋‹จํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค. ์ฆ‰ ์–ด๋–ค ํ•œ ์ž„์˜์˜ ๋…ธ๋“œ์—์„œ ๊ธธ์„ ๋”ฐ๋ผ ๊ฐ€๋ณด๋ฉด ์ž๊ธฐ ์ž์‹ ์œผ๋กœ ๋Œ์•„์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๋กœ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

3. ์žฅ๋‹จ์ [ํŽธ์ง‘]

3.1. ์žฅ์ [ํŽธ์ง‘]

  • ๋‹จ์ง€ ํ˜„ ๊ฒฝ๋กœ์ƒ์˜ ๋…ธ๋“œ๋“ค๋งŒ์„ ๊ธฐ์–ตํ•˜๋ฉด ๋˜๋ฏ€๋กœ ์ €์žฅ ๊ณต๊ฐ„์˜ ์ˆ˜์š”๊ฐ€ ๋น„๊ต์  ์ ๋‹ค.
  • ๋ชฉํ‘œ ๋…ธ๋“œ๊ฐ€ ๊นŠ์€ ๋‹จ๊ณ„์— ์žˆ์„ ๊ฒฝ์šฐ ํ•ด๋ฅผ ๋นจ๋ฆฌ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

3.2. ๋‹จ์ [ํŽธ์ง‘]

  • ํ•ด๊ฐ€ ์—†๋Š” ๊ฒฝ๋กœ์— ๊นŠ์ด ๋น ์งˆ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‹ค์ œ๋กœ๋Š” ๋ฏธ๋ฆฌ ์ง€์ •ํ•œ ์ž„์˜ ๊นŠ์ด๊นŒ์ง€๋งŒ ํƒ์ƒ‰ํ•˜๊ณ  ๋ชฉํ‘œ ๋…ธ๋“œ๋ฅผ ๋ฐœ๊ฒฌํ•˜์ง€ ๋ชปํ•˜๋ฉด ๋‹ค์Œ ๊ฒฝ๋กœ๋ฅผ ๋”ฐ๋ผ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์œ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์–ป์–ด์ง„ ํ•ด๊ฐ€ ์ตœ๋‹จ ๊ฒฝ๋กœ๊ฐ€ ๋œ๋‹ค๋Š” ๋ณด์žฅ์ด ์—†๋‹ค. ์ด๋Š” ๋ชฉํ‘œ์— ์ด๋ฅด๋Š” ๊ฒฝ๋กœ๊ฐ€ ๋‹ค์ˆ˜์ธ ๋ฌธ์ œ์— ๋Œ€ํ•ด ๊นŠ์ด์šฐ์„ ํƒ์ƒ‰์€ ํ•ด์— ๋‹ค๋‹ค๋ฅด๋ฉด ํƒ์ƒ‰์„ ๋๋‚ด๋ฒ„๋ฆฌ๋ฏ€๋กœ, ์ด๋•Œ ์–ป์–ด์ง„ ํ•ด๋Š” ์ตœ์ ์ด ์•„๋‹ ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

4. DFS ํŠธ๋ฆฌ[ํŽธ์ง‘]

ํ•œ ์ •์ ์„ ๋‘๋ฒˆ ์ด์ƒ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š๋Š” ์—ฐ๊ฒฐ๊ทธ๋ž˜ํ”„์—์„œ DFSํŠธ๋ฆฌ๋ผ๋Š” ์œ ํ–ฅํŠธ๋ฆฌ ๊ตฌ์กฐ๊ฐ€ ๋งŒ๋“ค์–ด์ง„๋‹ค.
  • Tree edge๋ž€ DFS์ค‘ a์ •์ ์„ ๋ฐฉ๋ฌธํ•œ ํ›„ b์ •์ ์„ ์ฒ˜์Œ ๋ฐฉ๋ฌธํ•  ๋•Œ, aโ†’b์˜ ์œ ํ–ฅ๊ฐ„์„ ์„ ๋งํ•œ๋‹ค.
  • Back edge๋ž€ DFS์ค‘ a์ •์ ์„ ๋ฐฉ๋ฌธํ•œ ํ›„ ์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ b ์ •์ ์„ ๋ฐฉ๋ฌธํ•  ๋•Œ, b๊ฐ€ a์˜ ์กฐ์ƒ์ผ ๋•Œ aโ†’b์˜ ์œ ํ–ฅ๊ฐ„์„ ์„ ๋งํ•œ๋‹ค,
  • Forward edge๋ž€ DFS์ค‘ a์ •์ ์„ ๋ฐฉ๋ฌธํ•œ ํ›„ ์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ b ์ •์ ์„ ๋ฐฉ๋ฌธํ•  ๋•Œ, a๊ฐ€ b์˜ ์กฐ์ƒ์ผ ๋•Œ aโ†’b์˜ ์œ ํ–ฅ๊ฐ„์„ ์„ ๋งํ•œ๋‹ค.
  • Cross edge๋ž€ DFS์ค‘ a์ •์ ์„ ๋ฐฉ๋ฌธํ•œ ํ›„ ์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ b ์ •์ ์„ ๋ฐฉ๋ฌธํ•  ๋•Œ, aโ†’b์˜ ์œ ํ–ฅ๊ฐ„์„ ์ด Back edge๋‚˜ Forward edge๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ๋ฅผ ๋งํ•œ๋‹ค.

DFS ํŠธ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด unrooted tree๋ฅผ rooted tree๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ฒฝ์šฐ์—๋Š” Tree edge์ด์™ธ์˜ ๊ฐ„์„ ์ด ์กด์žฌํ•˜์ง€ ์•Š๊ฒŒ ๋œ๋‹ค.
[1] ์‰ฝ๊ฒŒ ๋งํ•˜์ž๋ฉด, ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ ์Šคํƒ์˜ ํ•œ๊ณ„ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ดˆ๊ณผํ•˜๋Š” ๊ฒƒ์ด๋‹ค.