์ตœ๋Œ€ 1 ๋ถ„ ์†Œ์š”

DFS๋ž€?

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์ธ DFS.

๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰์˜ ์•ฝ์ž๋กœ, ๊ทธ๋ž˜ํ”„์˜ ๊นŠ์€ ๋ถ€๋ถ„์„ ์šฐ์„ ์ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž„.

์‹œ์ž‘ ๋…ธ๋“œ์—์„œ ์ถœ๋ฐœํ•ด์„œ, ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ํ•œ ๊นŠ๊ฒŒ ํƒ์ƒ‰ํ•œ ํ›„, ๋” ์ด์ƒ ๊ฐˆ ๊ณณ์ด ์—†์œผ๋ฉด ์ด์ „ ๋ถ„๊ธฐ์ ์œผ๋กœ ๋Œ์•„๊ฐ€ ๋‹ค๋ฅธ ๊ฒฝ๋กœ๋ฅผ ํƒ์ƒ‰ํ•จ.

์™œ๋ƒ๋ฉด DFS๋Š” ์Šคํƒ์ด๋‚˜ ์žฌ๊ท€๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ณ , ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•˜๊ณ ์ž ํ•  ๋•Œ ์œ ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ž„.

DFS๋Š” ๊ฒฝ๋กœ์˜ ์กด์žฌ ์—ฌ๋ถ€, ๊ทธ๋ž˜ํ”„์˜ ์—ฐ๊ฒฐ ์š”์†Œ ์ฐพ๊ธฐ ๋“ฑ์— ์‚ฌ์šฉ๋จ.

python ์ˆ˜๋„์ฝ”๋“œ

def DFS(graph, node, visited):
    if node in visited:
		    return
   	visited.append(node)
   	
   	for i in graph[node]:
   	    if i not in visited:
   	        DFS(graph, i, visited)
  • if node in visited:: ๋ฐฉ๋ฌธ ๊ธฐ๋ก์— node๊ฐ€ ์žˆ์œผ๋ฉด?
    • return : ํ•œ ๋ฒˆ ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ๋Š” ๋˜ ๋‹ค์‹œ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ข…๋ฃŒ
  • visited.append(node): ๋ฐฉ๋ฌธ ๊ธฐ๋ก์— node๊ฐ€ ์—†์œผ๋ฉด ํ•ด๋‹น node ๋ฐฉ๋ฌธ ๊ธฐ๋ก์— ์ถ”๊ฐ€
  • for i in graph[node]:: node์˜ leaf ๋…ธ๋“œ๋“ค์„ ํƒ์ƒ‰
  • if i not in visited:: node์˜ leaf ๋…ธ๋“œ๋“ค ์ค‘ ๋ฐฉ๋ฌธ ๊ธฐ๋ก์— ์—†์œผ๋ฉด?
    • DFS(graph, i, visited): DFS๋ฅผ ๋‹ค์‹œ ์‹คํ–‰(์žฌ๊ท€)

์ ์šฉ ์‚ฌ๋ก€

DFS๋Š” BFS์™€ ๊ฐ™์ด ๊ทธ๋ž˜ํ”„๋ฅผ ์ „์ฒด ํƒ์ƒ‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž„.

์ด ๋ฐฉ๋ฒ•๋“ค์„ ์‚ฌ์šฉํ•˜์—ฌ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋Œ€ํ‘œ์ ์ธ ๋ฌธ์ œ๋“ค์ด ๋ฏธ๋กœ ์ฐพ๊ธฐ, ํผ์ฆ ๊ฒŒ์ž„, ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ์ƒํƒœ ํ™•์ธ ๋“ฑ์ด ์žˆ์Œ.

๋‹จ, DFS๋Š” ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ฒฝ๋กœ๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉฐ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ๊ณ , BFS๋Š” ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์ฐพ๋Š” ๋ฐฉ์‹์—์„œ ์ฐจ์ด๊ฐ€ ์žˆ๊ธด ํ•จ!

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์ค€๋น„ํ•  ๋•Œ ํ•„์ˆ˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž„..!

ํƒœ๊ทธ: , , ,

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ:

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ