Java/์•Œ๊ณ ๋ฆฌ์ฆ˜

[์•Œ๊ณ ๋ฆฌ์ฆ˜] DFS (๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰) ์™€ BFS (๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰), ๊ทธ๋ฆฌ๊ณ  Binary Search(์ด์ง„ ํƒ์ƒ‰)

soowitty 2024. 1. 30. 12:13
๐Ÿ’ก ๋Œ€๋ถ€๋ถ„์˜ ๋‚ด์šฉ์„ Do it! ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ with JAVA ๊ฐ•์˜๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

 

DFS (Depth - First Search)


DFS (๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰)์€ ๊ทธ๋ž˜ํ”„ ์™„์ „ ํƒ์ƒ‰ ๊ธฐ๋ฒ• ์ค‘ ํ•˜๋‚˜์ด๋‹ค.

๊ทธ๋ž˜ํ”„์˜ ์‹œ์ž‘ ๋…ธ๋“œ์—์„œ ์ถœ๋ฐœํ•˜์—ฌ ํƒ์ƒ‰ํ•  ํ•œ ์ชฝ ๋ถ„๊ธฐ๋ฅผ ์ •ํ•˜์—ฌ ์ตœ๋Œ€ ๊นŠ์ด๊นŒ์ง€ ํƒ์ƒ‰์„ ๋งˆ์นœ ํ›„ ๋‹ค๋ฅธ์ชฝ ๋ถ„๊ธฐ๋กœ ์ด๋™ํ•˜์—ฌ ๋‹ค์‹œ ํƒ์ƒ‰ํ•œ๋‹ค. (์ตœ๋Œ€ ๊นŠ์ด๊นŒ์ง€ ํƒ์ƒ‰ํ•œ ํ›„ ๋‹ค์Œ์œผ๋กœ ๋„˜์–ด๊ฐ„๋‹ค!)

 

ํŠน์ง•

  • ์žฌ๊ท€ํ•จ์ˆ˜๋กœ ๊ตฌํ˜„ํ•œ๋‹ค. ์ด๋•Œ, stack overflow์— ์œ ์˜ํ•ด์•ผ ํ•œ๋‹ค.
  • ์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•œ๋‹ค.

 

์‹œ๊ฐ„ ๋ณต์žก๋„

O(V + E)

O(๋…ธ๋“œ ์ˆ˜ + ์—ฃ์ง€ ์ˆ˜)

 

ํ•ต์‹ฌ ์ด๋ก 

  • ๋…ธ๋“œ ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ์ฒดํฌํ•  ๋ฐฐ์—ด์ด ํ•„์š”ํ•˜๋‹ค.
    • ํ•œ ๋ฒˆ ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ๋Š” ๋‹ค์‹œ ๋ฐฉ๋ฌธํ•˜๋ฉด ์•ˆ ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ค‘๋ณต ๋ฐฉ๋ฌธ ๋ถˆ๊ฐ€!!
  • ๊ทธ๋ž˜ํ”„(๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๋Š” ์ž๋ฃŒ๊ตฌ์กฐ)๋Š” ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋กœ ํ‘œํ˜„ํ•œ๋‹ค.
  • ์Šคํƒ ์„ฑ์งˆ์„ ๊ฐ€์ง€๋Š” ์žฌ๊ท€ ํ•จ์ˆ˜๋กœ ์ฃผ๋กœ ๊ตฌํ˜„ํ•œ๋‹ค.
    • DFS์˜ ํƒ์ƒ‰ ๋ฐฉ์‹์€ ํ›„์ž…์„ ์ถœ(LIFO) ํŠน์„ฑ์„ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

 

BFS (Breadth - First Search)


BFS (๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰)์€ ๊ทธ๋ž˜ํ”„ ์™„์ „ ํƒ์ƒ‰ ๊ธฐ๋ฒ• ์ค‘ ํ•˜๋‚˜์ด๋‹ค.

์‹œ์ž‘ ๋…ธ๋“œ์—์„œ ์ถœ๋ฐœํ•˜๊ณ , ์‹œ์ž‘ ๋…ธ๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ฐ€๊นŒ์šด ๋…ธ๋“œ๋ฅผ ๋จผ์ € ๋ฐฉ๋ฌธํ•˜๋ฉด์„œ ํƒ์ƒ‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

 

ํŠน์ง•

  • ์„ ์ž…์„ ์ถœ(FIFO) ํƒ์ƒ‰์ด๋‹ค. 
  • ํ(queue) ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•œ๋‹ค.

 

์‹œ๊ฐ„ ๋ณต์žก๋„

 

O(V + E)

O(๋…ธ๋“œ ์ˆ˜ + ์—ฃ์ง€ ์ˆ˜)

 

DFS์™€ BFS์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š”, ๋‘ ๋ฐฉ์‹ ๋ชจ๋‘ ์กฐ๊ฑด ๋‚ด์˜ ์ „์ฒด ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰ํ•œ๋‹ค๋Š” ์ ์—์„œ ๋™์ผํ•˜๋‹ค. ํ•˜์ง€๋งŒ, ์ผ๋ฐ˜์ ์œผ๋กœ DFS๋ฅผ ์žฌ๊ท€ํ•จ์ˆ˜๋กœ ๊ตฌํ˜„ํ•œ๋‹ค๋Š” ์ ์—์„œ BFS๊ฐ€ ์กฐ๊ธˆ ๋” ๋น ๋ฅด๊ฒŒ ๋™์ž‘ํ•œ๋‹ค.

 

ํ•ต์‹ฌ ์ด๋ก 

DFS์™€ ๋™์ผํ•œ ํŠน์ง•์ด๋‹ค.

  • ๋ฐฉ๋ฌธํ–ˆ๋˜ ๋…ธ๋“œ๋Š” ๋‹ค์‹œ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ๊ทธ๋ž˜ํ”„(๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๋Š” ์ž๋ฃŒ๊ตฌ์กฐ)๋Š” ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋กœ ํ‘œํ˜„ํ•œ๋‹ค.

DFS์™€์˜ ์ฐจ์ด์ ์€, ์Šคํƒ์ด ์•„๋‹Œ ํ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

 

 

ํ‘œ๋กœ ๋‚˜ํƒ€๋‚ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  DFS (๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰) BFS (๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰)
ํƒ์ƒ‰ ๋ฐฉ๋ฒ• ์‹œ์ž‘ ๋…ธ๋“œ ๊ธฐ์ค€ ์ตœ๋Œ€ ๊นŠ์ด๊นŒ์ง€ ๋ฐฉ๋ฌธํ•˜๋ฉด์„œ ํƒ์ƒ‰ ์‹œ์ž‘ ๋…ธ๋“œ ๊ธฐ์ค€ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋…ธ๋“œ๋ถ€ํ„ฐ ๋ฐฉ๋ฌธํ•˜๋ฉด์„œ ํƒ์ƒ‰
๊ตฌํ˜„ ๋ฐฉ๋ฒ• ์Šคํƒ or ์žฌ๊ท€ํ•จ์ˆ˜ ํ
์‹œ๊ฐ„ ๋ณต์žก๋„ O(V + E)

 

 

 

โ“ ๋‘˜ ์ค‘ ์–ด๋Š ๊ฒƒ์„ ์‚ฌ์šฉํ•ด์•ผ ํ• ๊นŒ?

1. ๊ทธ๋ž˜ํ”„์˜ ๋ชจ๋“  ์ •์ ์„ ๋ฐฉ๋ฌธํ•˜๋Š” ๋ฌธ์ œ

 DFS, BFS ๋‘˜ ๋‹ค ์‚ฌ์šฉ ๊ฐ€๋Šฅ

 

2. ๊ฒฝ๋กœ์˜ ํŠน์ง•์„ ์ €์žฅํ•ด๋‘์–ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ

ex) ๊ฐ ์ •์ ์— ์ˆซ์ž๊ฐ€ ์ ํ˜€์žˆ๊ณ  a๋ถ€ํ„ฐ b๊นŒ์ง€ ๊ฐ€๋Š” ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•˜๋Š”๋ฐ ๊ฒฝ๋กœ์— ๊ฐ™์€ ์ˆซ์ž๊ฐ€ ์žˆ์œผ๋ฉด ์•ˆ ๋œ๋‹ค๋Š” ๋ฌธ์ œ ๋“ฑ, ๊ฐ๊ฐ์˜ ๊ฒฝ๋กœ๋งˆ๋‹ค ํŠน์ง•์„ ์ €์žฅํ•ด๋‘ฌ์•ผ ํ•  ๋•Œ
DFS ์‚ฌ์šฉ (BFS๋Š” ๊ฒฝ๋กœ์˜ ํŠน์ง•์„ ๊ฐ€์ง€์ง€ ๋ชปํ•œ๋‹ค)

 

3. ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ

ex) ๋ฏธ๋กœ ์ฐพ๊ธฐ ๋“ฑ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•ด์•ผ ํ•  ๋•Œ
BFS ์‚ฌ์šฉ
(DFS๋กœ ๊ฒฝ๋กœ๋ฅผ ๊ฒ€์ƒ‰ํ•  ๊ฒฝ์šฐ ์ฒ˜์Œ์œผ๋กœ ๋ฐœ๊ฒฌ๋˜๋Š” ํ•ด๋‹ต์ด ์ตœ๋‹จ๊ฑฐ๋ฆฌ๊ฐ€ ์•„๋‹ ์ˆ˜ ์žˆ๋‹ค. ๋ฐ˜๋ฉด, BFS๋Š” ํ˜„์žฌ ๋…ธ๋“œ๋ถ€ํ„ฐ ๊ฐ€๊นŒ์šด ๊ณณ๋ถ€ํ„ฐ ์ฐพ๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฝ๋กœ ํƒ์ƒ‰ ์‹œ ๋จผ์ € ์ฐพ์•„์ง€๋Š” ํ•ด๋‹ต์ด ๊ณง ์ตœ๋‹จ๊ฑฐ๋ฆฌ์ด๋‹ค.)

 

๐Ÿ“Œ ๊ฒ€์ƒ‰ ๋Œ€์ƒ ๊ทธ๋ž˜ํ”„๊ฐ€ ํด ๋•Œ -> DFS ๊ณ ๋ ค
๐Ÿ“Œ ๊ฒ€์ƒ‰ ๋Œ€์ƒ์˜ ๊ทœ๋ชจ๊ฐ€ ํฌ์ง€ ์•Š๊ณ , ๊ฒ€์ƒ‰ ์‹œ์ž‘ ์ง€์ ์œผ๋กœ๋ถ€ํ„ฐ ์›ํ•˜๋Š” ๋Œ€์ƒ์ด ๋ฉ€์ง€ ์•Š์„ ๋•Œ -> BFS ๊ณ ๋ ค

 

 

 

Binary Search (์ด์ง„ ํƒ์ƒ‰)


Binary Search(์ด์ง„ ํƒ์ƒ‰)์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” ์ƒํƒœ์—์„œ ์›ํ•˜๋Š” ๊ฐ’์„ ์ฐพ์•„๋‚ด๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

๋ฐ์ดํ„ฐ์˜ ์ค‘์•™๊ฐ’๊ณผ ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’์„ ๋น„๊ตํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๋ฅผ ์ ˆ๋ฐ˜์”ฉ ์ค„์ด๋ฉด์„œ ์›ํ•˜๋Š” ๊ฐ’์„ ์ฐพ๋Š”๋‹ค.

 

์ •๋ ฌ ๋ฐ์ดํ„ฐ์—์„œ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํƒ์ƒ‰ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

 

๊ตฌํ˜„ ๋ฐ ์›๋ฆฌ๊ฐ€ ๋น„๊ต์  ๊ฐ„๋‹จํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ฝ”๋”ฉํ…Œ์ŠคํŠธ์—์„œ๋Š” ์ฃผ๋กœ ๋ถ€๋ถ„ ๋ฌธ์ œ๋กœ ์š”๊ตฌํ•˜๋Š” ์˜์—ญ์ด๋‹ค.

 

 

์‹œ๊ฐ„ ๋ณต์žก๋„

O(logN)

 

 

์ด์ง„ํƒ์ƒ‰์€ log(N)๋ฒˆ์˜ ์—ฐ์‚ฐ์œผ๋กœ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค. 

ํ•˜์ง€๋งŒ ์ด์ง„ํƒ์ƒ‰์€ ๋ฐ˜๋“œ์‹œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” ์ƒํƒœ์—ฌ์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์— ์ฃผ์˜ํ•˜์ž!

 

 


Reference

 

https://devuna.tistory.com/32

 

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(DFS) ๊ณผ ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(BFS)

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(DFS)๊ณผ ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(BFS) ๊ทธ๋ž˜ํ”„๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ํฌ๊ฒŒ ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(DFS)๊ณผ ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(BFS)์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ“Œ์—ฌ๊ธฐ์„œ ๊ทธ๋ž˜ํ”„๋ž€, ์ •์ (node)๊ณผ ๊ทธ ์ •์ ์„ ์—ฐ๊ฒฐํ•˜

devuna.tistory.com