๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ–ฅ CS/Algorithm

[Algorithm/Swift] DFS(๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰) Swift๋กœ ๊ตฌํ˜„ํ•ด๋ณด๊ธฐ

์š”์ฆ˜ <์ด๊ฒƒ์ด ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋‹ค> ๋ผ๋Š” ์ฑ…์œผ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐœ๋…๋“ค์„ ํ•˜๋‚˜์”ฉ ๋ฟŒ์ˆ˜๊ณ  ์žˆ๋Š”๋ฐ์š”,

์ด ์ฑ…์ด ํŒŒ์ด์ฌ ์–ธ์–ด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์„ค๋ช…๋˜์–ด์žˆ์–ด์„œ ๊ฐœ๋…์„ ํ•™์Šตํ•˜๊ณ , ์˜ˆ์ œ๋‚˜ ์‹ค์ „ ๋ฌธ์ œ๋“ค์„ Swift์–ธ์–ด๋กœ ํ’€์ดํ•ด๋ณด๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฐจ๊ทผ์ฐจ๊ทผ ๊ณต๋ถ€ํ•ด๊ฐ€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค! ๊ฐœ๋…์„ ๊ณต๋ถ€ํ•˜๊ณ  Swift ์–ธ์–ด๋กœ ๋ฐ”๊ฟ”๋ณด๋Š” ๊ณผ์ •์„ ์ •๋ฆฌํ•ด๋‘๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์„œ ํ•˜๋‚˜์”ฉ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค!

 

์˜ค๋Š˜์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฐœ๋…๋“ค ์ค‘ ํ•˜๋‚˜์ธ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜, ๊ทธ ์ค‘์—์„œ๋„ DFS(๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰)์˜ ๊ฐœ๋…์„ ์ •๋ฆฌํ•ด๋ณด๊ณ , ์ฑ…์˜ ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ๋ฅผ Swift ์–ธ์–ด๋กœ ๋ฐ”๊ฟ”์„œ DFS๋ฅผ ๊ตฌํ˜„ํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค! 

DFS

DFS(Depth-First Search)๋Š” ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰์ด๋ผ๊ณ ๋„ ๋ถ€๋ฅด๋ฉฐ, ๊ทธ๋ž˜ํ”„์—์„œ ๊นŠ์€ ๋ถ€๋ถ„์„ ์šฐ์„ ์ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด, ๊ทธ๋ž˜ํ”„๋Š” ์–ด๋–ค ๊ตฌ์กฐ์ธ์ง€ ๋ถ€ํ„ฐ ์•Œ์•„์•ผ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋„ค์š”!

๊ทธ๋ž˜ํ”„์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ ๋ถ€ํ„ฐ ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•˜๊ณ  ๋‹ค์‹œ DFS ๋กœ ๋„˜์–ด๊ฐ€๊ฒ ์Šต๋‹ˆ๋‹ค!!

๊ทธ๋ž˜ํ”„

๊ทธ๋ž˜ํ”„๋Š” ๋…ธ๋“œ(Node)์™€ ๊ฐ„์„ (Edge)์œผ๋กœ ํ‘œํ˜„๋˜๋ฉฐ ์ด๋•Œ ๋…ธ๋“œ๋ฅผ ์ •์ (Vertex)์ด๋ผ๊ณ ๋„ ๋งํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜ํ”„๋ฅผ ํƒ์ƒ‰ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ํ•˜๋‚˜์˜ ๋…ธ๋“œ๋ฅผ ์‹œ์ž‘์œผ๋กœ ๋‹ค์ˆ˜์˜ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•˜๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

๋‘ ๋…ธ๋“œ๊ฐ€ ๊ฐ„์„ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค๋ฉด '๋‘ ๋…ธ๋“œ๋Š” ์ธ์ ‘ํ•˜๋‹ค'๋ผ๊ณ  ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.

 

์œ„์˜ ๊ทธ๋ฆผ์—์„œ 1๋ฒˆ ๋…ธ๋“œ, 2๋ฒˆ ๋…ธ๋“œ๋Š” 0๋ฒˆ ๋…ธ๋“œ์™€ ๊ฐ„์„ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— 0๋ฒˆ ๋…ธ๋“œ์™€ 1๋ฒˆ ๋…ธ๋“œ, ๊ทธ๋ฆฌ๊ณ  0๋ฒˆ ๋…ธ๋“œ์™€ 2๋ฒˆ ๋…ธ๋“œ๋Š” ์ธ์ ‘ํ•œ ๋…ธ๋“œ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, 1๋ฒˆ ๋…ธ๋“œ์™€ 2๋ฒˆ ๋…ธ๋“œ๋Š” ๊ฐ„์„ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋‘ ๋…ธ๋“œ๋Š” ์ธ์ ‘ํ•œ ๋…ธ๋“œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

 

์ด๋Ÿฌํ•œ ๊ทธ๋ž˜ํ”„๋ฅผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ๋Š” ์ธ์ ‘ ํ–‰๋ ฌ, ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ ์ด๋ ‡๊ฒŒ 2๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

  • ์ธ์ ‘ ํ–‰๋ ฌ(Adjacency Matrix): 2์ฐจ์› ๋ฐฐ์—ด๋กœ ๊ทธ๋ž˜ํ”„์˜ ์—ฐ๊ฒฐ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ์‹
  • ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ(Adjacency List): ๋ฆฌ์ŠคํŠธ๋กœ ๊ทธ๋ž˜ํ”„์˜ ์—ฐ๊ฒฐ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ์‹

1. ์ธ์ ‘ ํ–‰๋ ฌ 

์ธ์ ‘ ํ–‰๋ ฌ ๋ฐฉ์‹์€ 2์ฐจ์› ๋ฐฐ์—ด์— ๊ฐ ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋œ ํ˜•ํƒœ๋ฅผ ๊ธฐ๋กํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋‹ค๋ฉด 1, ์—ฐ๊ฒฐ๋˜์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด(=์ธ์ ‘ํ•œ ๋…ธ๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด) 0์œผ๋กœ ํ‘œ๊ธฐํ•ฉ๋‹ˆ๋‹ค. 

(๊ฐ€์ค‘์น˜ ๊ทธ๋ž˜ํ”„์˜ ๊ฒฝ์šฐ 1 ๋Œ€์‹  ๊ฐ€์ค‘์น˜ ๊ฐ’(=๊ฑฐ๋ฆฌ)์œผ๋กœ ํ‘œ๊ธฐํ•˜๊ณ  ์—ฐ๊ฒฐ๋˜์–ด์žˆ์ง€ ์•Š์€ ๋…ธ๋“œ์˜ ๊ฒฝ์šฐ ๋ฌดํ•œ์œผ๋กœ ํ‘œ๊ธฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)

์ธ์ ‘ ํ–‰๋ ฌ ๋ฐฉ์‹์˜ ์žฅ์ :

- ์ง๊ด€์ ์ด๋ฉฐ ์‰ฝ๊ฒŒ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. 

- 2์ฐจ์› ๋ฐฐ์—ด ์•ˆ์— ๋ชจ๋“  ๋…ธ๋“œ๋“ค์˜ ๊ฐ„์„  ์ •๋ณด๋ฅผ ๋‹ด๊ธฐ ๋•Œ๋ฌธ์—, ๋‘ ๋…ธ๋“œ์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ ์กฐํšŒํ•  ๋•Œ O(1)์ด๋ฉด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

์ธ์ ‘ ํ–‰๋ ฌ ๋ฐฉ์‹์˜ ๋‹จ์ :

- ์ธ์ ‘ ํ–‰๋ ฌ ๋ฐฉ์‹์€ ๋ชจ๋“  ๊ด€๊ณ„๋ฅผ ์ €์žฅํ•˜๋ฏ€๋กœ ๋…ธ๋“œ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์„์ˆ˜๋ก ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋‚ญ๋น„๋ฉ๋‹ˆ๋‹ค.

- ๋ชจ๋“  ๋…ธ๋“œ์— ๋Œ€ํ•œ ๊ฐ„์„  ์ •๋ณด๋ฅผ ๋Œ€์ž…ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— O(n²)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ์†Œ์š”๋ฉ๋‹ˆ๋‹ค.

 

2. ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ

์ธ์ ‘ ๋ฆฌ์ŠคํŠธ ๋ฐฉ์‹์—์„œ๋Š” ์•„๋ž˜์˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ๋ชจ๋“  ๋…ธ๋“œ์— ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ์—ฐ๊ฒฐํ•˜์—ฌ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

์ฃผ๋กœ ๋…ธ๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์„œ ํ•ด๋‹น ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋Š” ๋ชจ๋“  ๋…ธ๋“œ๋“ค์„ ์š”์†Œ๋กœ ๊ฐ€์ง€๋Š” ๋ฐฐ์—ด๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.

 

์ธ์ ‘ ๋ฆฌ์ŠคํŠธ ๋ฐฉ์‹์˜ ์žฅ์ :

- ํ•„์š”ํ•œ ์ •๋ณด๋งŒ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

- ๋…ธ๋“œ๋“ค์˜ ์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ ํƒ์ƒ‰ํ•  ๋•Œ O(n)์˜ ์‹œ๊ฐ„์ด๋ฉด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. (n์€ ๊ฐ„์„  ๊ฐฏ์ˆ˜)

 

์ธ์ ‘ ๋ฆฌ์ŠคํŠธ ๋ฐฉ์‹์˜ ๋‹จ์ : 

- ์ธ์ ‘ ํ–‰๋ ฌ์— ๋น„ํ•ด ๊ตฌํ˜„์ด ๋น„๊ต์  ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

- ํŠน์ • ๋‘ ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ณผ์ •์ด ์ธ์ ‘ ํ–‰๋ ฌ์— ๋น„ํ•ด ๋น„๊ต์  ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.

 

์ด ์ •๋„๋ฉด ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๊ทธ๋ž˜ํ”„์˜ ๊ธฐ๋ณธ์ ์ธ ์ง€์‹์€ ์ •๋ฆฌ๊ฐ€ ๋œ ๊ฒƒ ๊ฐ™๋„ค์š”.

๊ทธ๋ž˜ํ”„์— ๋Œ€ํ•ด ์ข€ ๋” ์ž์„ธํžˆ ์•Œ๊ณ ์‹ถ๋‹ค๋ฉด ์•„๋ž˜์˜ ๋งํฌ์— ์ž˜ ์ •๋ฆฌ๊ฐ€ ๋˜์–ด์žˆ์–ด์„œ ์ฐธ๊ณ ํ•ด๋ณด๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค!

 

Swift) ๊ทธ๋ž˜ํ”„(Graph) ์ดํ•ดํ•˜๊ธฐ

์•ˆ๋…•ํ•˜์„ธ์š”!! ์†Œ๋“ค์ž…๋‹ˆ๋‹ค :) ์˜ค๋Š˜์€ ์ž๋ฃŒ๊ตฌ์กฐ ์ค‘์—์„œ ๊ทธ๋ž˜ํ”„๋ž€ ๊ฒƒ์— ๋Œ€ํ•ด ์•Œ์•„๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค!! ์Œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘์—์„œ ๋ญ ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(BFS) ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(DFS) ์ด๋Ÿฐ ๊ฒƒ๋“ค ๋“ค์–ด ๋ณด์…จ์ก?? ์ด๊ฒƒ๋“ค์ด ๋ชจ

babbab2.tistory.com

 

์ด์ œ ๋‹ค์‹œ DFS๋กœ ๋Œ์•„์™€์„œ!

DFS๋Š” ๊ทธ๋ž˜ํ”„์—์„œ ๊นŠ์€ ๋ถ€๋ถ„์„ ์šฐ์„ ์ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ผ๊ณ  ํ–ˆ์—ˆ์ฃ ??

๊ตฌ์ฒด์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์ธ์ง€ ์•Œ์•„๋ด…์‹œ๋‹ค.

 

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

DFS๋Š” ์Šคํƒ(stack) ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•˜๋ฉฐ ๊ตฌ์ฒด์ ์ธ ๋™์ž‘ ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

1. ํƒ์ƒ‰ ์‹œ์ž‘ ๋…ธ๋“œ๋ฅผ ์Šคํƒ์— ์‚ฝ์ž…(append)ํ•˜๊ณ  ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.

2. ์Šคํƒ์˜ ์ตœ์ƒ๋‹จ ๋…ธ๋“œ์— ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ž…์ ‘ ๋…ธ๋“œ๊ฐ€ ์žˆ์œผ๋ฉด ๊ทธ ์ธ์ ‘ ๋…ธ๋“œ๋ฅผ ์Šคํƒ์— ๋„ฃ๊ณ  ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ธ์ ‘ ๋…ธ๋“œ๊ฐ€ ๋”์ด์ƒ ์—†๋‹ค๋ฉด ์Šคํƒ์—์„œ ์ตœ์ƒ๋‹จ ๋…ธ๋“œ๋ฅผ ๊บผ๋ƒ…๋‹ˆ๋‹ค.
3. 2๋ฒˆ์˜ ๊ณผ์ •์„ ๋” ์ด์ƒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.

 

์ด์ œ ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ๋กœ ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด์„œ DFS๋ฅผ ์ดํ•ดํ•ด๋ด…์‹œ๋‹ค!

์œ„์™€ ๊ฐ™์€ ๊ตฌ์กฐ์˜ ๊ทธ๋ž˜ํ”„๋ฅผ 1๋ฒˆ ๋…ธ๋“œ๋ฅผ ์‹œ์ž‘ ๋…ธ๋“œ๋กœ ์„ค์ •ํ•˜์—ฌ DFS๋ฅผ ์ด์šฉํ•ด ํƒ์ƒ‰์„ ํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์ œ์ผ ๋จผ์ € ์‹œ์ž‘ ๋…ธ๋“œ์ธ 1์„ ์Šคํƒ์— ์‚ฝ์ž…ํ•˜๊ณ  ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์Šคํƒ์˜ ์ตœ์ƒ๋‹จ ๋…ธ๋“œ๋Š” 1์ด ๋ฉ๋‹ˆ๋‹ค. ์ตœ์ƒ๋‹จ ๋…ธ๋“œ์ธ 1์— ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ธ์ ‘ ๋…ธ๋“œ๋Š” 2, 3, 8 ์ž…๋‹ˆ๋‹ค.

์ด ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ๋…ธ๋“œ์ธ 2๋ฅผ ์Šคํƒ์— ๋„ฃ๊ณ  ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค. 

์ƒˆ๋กญ๊ฒŒ ์Šคํƒ์˜ ์ตœ์ƒ๋‹จ ๋…ธ๋“œ๊ฐ€ ๋œ 2์— ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ธ์ ‘ ๋…ธ๋“œ๋Š” 7์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 7์„ ์Šคํƒ์— ๋„ฃ๊ณ  ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ ํ•ฉ๋‹ˆ๋‹ค.

์Šคํƒ์˜ ์ตœ์ƒ๋‹จ ๋…ธ๋“œ์ธ 7์— ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ธ์ ‘ ๋…ธ๋“œ๋Š” 6๊ณผ 8์ž…๋‹ˆ๋‹ค. ์ด ์ค‘ ์ž‘์€ 6์„ ๋จผ์ € ์Šคํƒ์— ์‚ฝ์ž…ํ•˜๊ณ  ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.

์Šคํƒ์˜ ์ตœ์ƒ๋‹จ ๋…ธ๋“œ์ธ 6์— ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ธ์ ‘ ๋…ธ๋“œ๋Š” ์—†๊ธฐ ๋•Œ๋ฌธ์— ์Šคํƒ์—์„œ 6์„ ๊บผ๋ƒ…๋‹ˆ๋‹ค. 

๋˜๋‹ค์‹œ ์ตœ์ƒ๋‹จ ๋…ธ๋“œ๊ฐ€ ๋œ 7์— ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ธ์ ‘ ๋…ธ๋“œ๋กœ๋Š” ์ด์ œ 8์ด ๋‚จ์•˜์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 8์„ ์Šคํƒ์— ๋„ฃ๊ณ  ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค. 

์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ๊ฐ€ ์—†์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค๋ฉด ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋…ธ๋“œ์˜ ํƒ์ƒ‰ ์ˆœ์„œ๋Š”

1 -> 2 -> 7 -> 6 -> 8 -> 3 -> 4 -> 5 ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

 

์œ„ ๊ณผ์ •์„ ์‹ค์ œ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„์„ ํ•œ๋‹ค๋ฉด ๋˜‘๊ฐ™์€ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์žฌ๊ท€ํ•จ์ˆ˜๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Swift ์ฝ”๋“œ๋กœ ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ทธ๋ž˜ํ”„๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

// 2์ฐจ์› ๋ฐฐ์—ด
let graph = [[],
             [2, 3, 8],
             [1, 7],
             [1, 4, 5],
             [3, 5],
             [3, 4],
             [7],
             [2, 6, 8],
             [1, 7]]

// ๋ฐฉ๋ฌธ ์—ฌ๋ถ€ ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด (์ฒ˜์Œ์—๋Š” ๋ชจ๋‘ false๋กœ ์ดˆ๊ธฐํ™”)
var visited = Array.init(repeating: false, count: graph.count)

func dfs(_ start: Int) {
    visited[start] = true // ์‹œ์ž‘ ๋…ธ๋“œ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ
    
    print(start, terminator: " ")
    
    for i in graph[start] {
        if !visited[i] {
            dfs(i)
        }
    }
}

// ์‹œ์ž‘ ๋…ธ๋“œ๋ฅผ 1๋กœ ์„ค์ •ํ•˜์—ฌ ํ•จ์ˆ˜ ํ˜ธ์ถœ
dfs(1) // 1 2 7 6 8 3 4 5

 


[์ฐธ๊ณ  ์ž๋ฃŒ]

 

Swift) ๊ทธ๋ž˜ํ”„(Graph) ์ดํ•ดํ•˜๊ธฐ

์•ˆ๋…•ํ•˜์„ธ์š”!! ์†Œ๋“ค์ž…๋‹ˆ๋‹ค :) ์˜ค๋Š˜์€ ์ž๋ฃŒ๊ตฌ์กฐ ์ค‘์—์„œ ๊ทธ๋ž˜ํ”„๋ž€ ๊ฒƒ์— ๋Œ€ํ•ด ์•Œ์•„๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค!! ์Œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘์—์„œ ๋ญ ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(BFS) ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(DFS) ์ด๋Ÿฐ ๊ฒƒ๋“ค ๋“ค์–ด ๋ณด์…จ์ก?? ์ด๊ฒƒ๋“ค์ด ๋ชจ

babbab2.tistory.com

<์ด๊ฒƒ์ด ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋‹ค with ํŒŒ์ด์ฌ>

 

์ด๊ฒƒ์ด ์ทจ์—…์„ ์œ„ํ•œ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋‹ค with ํŒŒ์ด์ฌ - ๊ต๋ณด๋ฌธ๊ณ 

์ทจ์—…๊ณผ ์ด์ง์„ ๊ฒฐ์ •ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ธํ„ฐ๋ทฐ ์™„๋ฒฝ ๊ฐ€์ด๋“œ | ์ด๋Ÿฐ ๋…์ž์—๊ฒŒ ๊ถŒํ•ฉ๋‹ˆ๋‹ค.โ–  IT ์ง๊ตฐ์˜ ์ทจ์—… ์ค€๋น„์ƒ / ์˜ˆ๋น„ ๊ฐœ๋ฐœ์žโ–  ์ด์ง์„ ์ค€๋น„ํ•˜๋Š” ๊ฐœ๋ฐœ์žโ–  ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋Œ€ํšŒ๋ฅผ ์ค€๋น„ํ•˜๋Š” ํ•™์ƒ[ํŠน์ง•]์ฝ”๋”ฉ

www.kyobobook.co.kr