๐Ÿค– Computer Science/Algorithm

DFS/BFS | ๊ด€๋ จ ์ž๋ฃŒ๊ตฌ์กฐ, ๊ฐœ๋…, ๊ตฌํ˜„์˜ˆ์ œ

yesolz 2023. 11. 23. 22:56
728x90

 

DFS/BFS ๋ฅผ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ ๊ธฐ์ดˆ : ์Šคํƒ, ํ, ์žฌ๊ท€ํ•จ์ˆ˜

ํƒ์ƒ‰ : ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ ์ค‘์—์„œ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๋Š” ๊ณผ์ •

๋Œ€ํ‘œ์ ์ธ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ DFS, BFS - ๊ธฐ๋ณธ ์ž๋ฃŒ๊ตฌ์กฐ์ธ ์Šคํƒ๊ณผ ํ์—๋Œ€ํ•œ ์ดํ•ด ํ•„์š”

 

 

์Šคํƒ

์Šคํƒ : ์„ ์ž…ํ›„์ถœ

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

๊ธฐ๋ณธ ๋ฆฌ์ŠคํŠธ์—์„œ append()์™€ pop() ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜๋ฉด ์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•œ๋‹ค.

append() ๋ฉ”์„œ๋“œ๋Š” ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ€์žฅ ๋’ค์ชฝ์— ์‚ฝ์ž…, pop() ๋ฉ”์„œ๋“œ๋Š” ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ€์žฅ ๋’ค์ชฝ์—์„œ ๋ฐ์ดํ„ฐ ๊บผ๋‚ด๊ธฐ ๋•Œ๋ฌธ

 

 

ํ

ํ : ์„ ์ž…์„ ์ถœ

collections ๋ชจ๋“ˆ์—์„œ ์ œ๊ณตํ•˜๋Š” deque ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•˜์ž.

deque๋Š” ์Šคํƒ๊ณผ ํ์˜ ์žฅ์ ์„ ๋ชจ๋‘ ์ฑ„ํƒํ•œ ๊ฒƒ์ธ๋ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ณ  ๋นผ๋Š” ์†๋„๊ฐ€ ๋ฆฌ์ŠคํŠธ ์ž๋ฃŒํ˜•์— ๋น„ํ•ด ํšจ์œจ์ ์ด๋ฉฐ

queue ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๊ฐ„๋‹จํ•˜๋‹ค.

๋˜ํ•œ deque ๊ฐ์ฒด๋ฅผ ๋ฆฌ์ŠคํŠธ ์ž๋ฃŒํ˜•์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด list() ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋œ๋‹ค. 

from collections import deque

# ํ ๊ตฌํ˜„์„ ์œ„ํ•ด deque ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ
queue = deque()

queue.append(5)
queue.append(3)
queue.append(2)
pop.left()
queue.append(1)
queue.popleft()

print(queue) # ๋จผ์ € ๋“ค์–ด์˜จ ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅ
queue.reverse() # ๋‹ค์Œ ์ถœ๋ ฅ์„ ์œ„ํ•ด ์—ญ์ˆœ์œผ๋กœ ๋ฐ”๊ฟˆ
print(queue) # ๋‚˜์ค‘์— ๋“ค์–ด์˜จ ์›์†Œ๋ถ€ํ„ฐ ์ถœ๋ ฅ

list(queue) # deque ๊ฐ์ฒด๋ฅผ ๋ฆฌ์ŠคํŠธ ์ž๋ฃŒํ˜•์œผ๋กœ ๋ณ€๊ฒฝ

 

 

์žฌ๊ท€ ํ•จ์ˆ˜

DFS์™€ BFS๋ฅผ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ์žฌ๊ท€ ํ•จ์ˆ˜๋„ ์ดํ•ดํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.

์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ๋ฌธ์ œ ํ’€์ด์—์„œ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์žฌ๊ท€ ํ•จ์ˆ˜๊ฐ€ ์–ธ์ œ ๋๋‚ ์ง€, ์ข…๋ฃŒ ์กฐ๊ฑด์„ ๊ผญ ๋ช…์‹œํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์— ์ฃผ์˜ํ•˜์ž.

 

์ปดํ“จํ„ฐ ๋‚ด๋ถ€์—์„œ ์žฌ๊ท€ ํ•จ์ˆ˜์˜ ์ˆ˜ํ–‰์€ ์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•œ๋‹ค.

ํ•จ์ˆ˜๋ฅผ ๊ณ„์† ํ˜ธ์ถœํ–ˆ์„ ๋•Œ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ํ˜ธ์ถœํ•œ ํ•จ์ˆ˜๊ฐ€ ๋จผ์ € ์ˆ˜ํ–‰์„ ๋๋‚ด์•ผ ๊ทธ ์•ž์˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ์ข…๋ฃŒ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋”ฐ๋ผ์„œ ์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•ด์•ผํ•˜๋Š” ์ƒ๋‹น์ˆ˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ„ํŽธํ•˜๊ฒŒ ๊ตฌํ˜„๋  ์ˆ˜ ์žˆ๋‹ค. ex ) DFS 

 

 

 

ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ DFS/BFS

๊ทธ๋ž˜ํ”„์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ

๋…ธ๋“œ(=์ •์ ), ๊ฐ„์„ 

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

๊ทธ๋ž˜ํ”„๋Š” 2๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

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

 

์ธ์ ‘ ํ–‰๋ ฌ ๋ฐฉ์‹

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

ํŒŒ์ด์ฌ์—์„œ 2์ฐจ์› ๋ฆฌ์ŠคํŠธ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์—ฐ๊ฒฐ์ด ๋˜์–ด ์žˆ์ง€ ์•Š์€ ๋…ธ๋“œ ๋ผ๋ฆฌ๋Š” ๋ฌดํ•œ์˜ ๋น„์šฉ์ด๋ผ๊ณ  ์ž‘์„ฑํ•œ๋‹ค. ์‹ค์ œ ์ฝ”๋“œ์—์„œ๋Š” ๋…ผ๋ฆฌ์ ์œผ๋กœ ์ •๋‹ต์ด ๋  ์ˆ˜ ์—†๋Š” ํฐ ๊ฐ’ ์ค‘์—์„œ 999999999, 987654321 ๋“ฑ์˜ ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

 

์ธ์ ‘ ํ–‰๋ ฌ ๋ฐฉ์‹ ์˜ˆ์ œ

INF = 999999999 # ๋ฌดํ•œ์˜ ๋น„์šฉ ์„ ์–ธ

# 2์ฐจ์› ๋ฆฌ์ŠคํŠธ๋ฅผ ์ด์šฉํ•ด ์ธ์ ‘ ํ–‰๋ ฌ ํ‘œํ˜„
graph = [
    [0, 7, 5],
    [7, 0, INF],
    [5, INF, 0]
 ]

 

 

์ธ์ ‘ ๋ฆฌ์ŠคํŠธ ๋ฐฉ์‹

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

์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋Š” '์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ'๋ผ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•ด ๊ตฌํ˜„ํ•œ๋‹ค.

C++๋‚˜ ์ž๋ฐ” ๋“ฑ์€ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ๊ธฐ๋Šฅ์„ ์œ„ํ•œ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฐ˜๋ฉด,

ํŒŒ์ด์ฌ์€ ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•์ธ ๋ฆฌ์ŠคํŠธ ์ž๋ฃŒํ˜•์ด append()์™€ ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณตํ•˜๋ฏ€๋กœ ์ „ํ†ต์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ์˜ ๋ฐฐ์—ด๊ณผ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ๊ธฐ๋Šฅ์„ ๋ชจ๋‘ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•œ๋‹ค.

 

ํŒŒ์ด์ฌ์œผ๋กœ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ด์šฉํ•ด ๊ทธ๋ž˜ํ”„๋ฅผ ํ‘œํ˜„ํ•˜๊ณ ์ž ํ•  ๋•Œ๋„ ๋‹จ์ˆœํžˆ 2์ฐจ์› ๋ฆฌ์ŠคํŠธ๋ฅผ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค๋Š” ์ ๋งŒ ๊ธฐ์–ตํ•˜์ž.

# ํ–‰์ด 3๊ฐœ์ธ 2์ฐจ์› ๋ฆฌ์ŠคํŠธ๋กœ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ ํ‘œํ˜„
graph = [[] for _ in range(3)]


# ๋…ธ๋“œ 0์— ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ ์ •๋ณด ์ €์žฅ(๋…ธ๋“œ, ๊ฑฐ๋ฆฌ)
graph[0].append((1, 7))
graph[0].append((2, 5))

# ๋…ธ๋“œ 1์— ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ ์ •๋ณด ์ €์žฅ(๋…ธ๋“œ, ๊ฑฐ๋ฆฌ)
...
# ๋…ธ๋“œ 2์— ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ ์ •๋ณด ์ €์žฅ(๋…ธ๋“œ, ๊ฑฐ๋ฆฌ)
...

 

 

์ธ์ ‘ ํ–‰๋ ฌ ๋ฐฉ์‹, ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ ๋ฐฉ์‹ ์ฐจ์ด

๋ฉ”๋ชจ๋ฆฌ ์ธก๋ฉด

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

๋ฐ˜๋ฉด ์ธ์ ‘๋ฆฌ์ŠคํŠธ ๋ฐฉ์‹์€ ์—ฐ๊ฒฐ๋œ ์ •๋ณด๋งŒ์„ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

 

์†๋„ ์ธก๋ฉด

์ธ์ ‘๋ฆฌ์ŠคํŠธ ๋ฐฉ์‹์€ ์ธ์ ‘ ํ–‰๋ ฌ ๋ฐฉ์‹์— ๋น„ํ•ด ํŠน์ •ํ•œ ๋‘ ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์–ป๋Š” ์†๋„๊ฐ€ ๋Š๋ฆฌ๋‹ค.

์—ฐ๊ฒฐ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์”ฉ ํ™•์ธํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

 

 

DFS

Depth-First Search, ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰

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

์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์—์„œ๋Š” ๋ฒˆํ˜ธ๊ฐ€ ๋‚ฎ์€ ์ˆœ์„œ๋ถ€ํ„ฐ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๋ช…์‹œํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ข…์ข… ์žˆ์œผ๋ฏ€๋กœ, ๊ด€ํ–‰์ ์œผ๋กœ ๋ฒˆํ˜ธ๊ฐ€ ๋‚ฎ์€ ์ˆœ์„œ๋ถ€ํ„ฐ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๊ตฌํ˜„ํ•˜๋ฉด ์ข‹๋‹ค.

๋…ธ๋“œ์˜ ํƒ์ƒ‰ ์ˆœ์„œ = ์Šคํƒ์— ๋“ค์–ด๊ฐ„ ์ˆœ์„œ

 

DFS๋Š” ์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ์— ๊ธฐ์ดˆํ•œ๋‹ค๋Š” ์ ์—์„œ ๊ตฌํ˜„์ด ๊ฐ„๋‹จํ•˜๋‹ค.

์‹ค์ œ๋กœ๋Š” ์Šคํƒ์„ ์“ฐ์ง€ ์•Š์•„๋„ ๋˜๋ฉฐ ํƒ์ƒ‰์„ ์ˆ˜ํ–‰ํ•จ์— ์žˆ์–ด์„œ ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๊ฐ€ N๊ฐœ์ธ ๊ฒฝ์šฐ O(N)์˜ ์‹œ๊ฐ„์ด ์†Œ์š”๋œ๋‹ค.

 

 

DFS๋Š” ์Šคํƒ์„ ์ด์šฉํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ ๊ตฌํ˜„์€ ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ–ˆ์„ ๋•Œ ๋งค์šฐ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

# DFS ๋ฉ”์„œ๋“œ ์ •๋ฆฌ
def dfs(graph, v, visited): 
    # ํ˜„์žฌ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ
    visited[v] = Tre
    print(v, end = ' ')
    # ํ˜„์žฌ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋œ ๋‹ค๋ฅธ ๋…ธ๋“œ๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ๋ฐฉ๋ฌธ
    for i in graph[v]:
    	if not visited[i]:
        	dfs(graph, i, visited)

# ๊ฐ ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋œ ์ •๋ณด๋ฅผ ๋ฆฌ์ŠคํŠธ ์ž๋ฃŒํ˜•์œผ๋กœ ํ‘œํ˜„(2์ฐจ์› ๋ฆฌ์ŠคํŠธ)
graph [
    [],
    [2, 3, 8]
    [1, 7],
    [1, 4, 5],
    [3, 5],
    [3, 4],
    [7],
    [2, 6, 8],
    [1, 7]
]

# ๊ฐ ๋…ธ๋“œ๊ฐ€ ๋ฐฉ๋ฌธํ•œ ์ •๋ณด๋ฅผ ๋ฆฌ์ŠคํŠธ ์ž๋ฃŒํ˜•์œผ๋กœ ํ‘œํ˜„(1์ฐจ์› ๋ฆฌ์ŠคํŠธ)
visited = [False] * 9

# ์ •์˜๋œ DFS ํ•จ์ˆ˜ ํ˜ธ์ถœ
dfs(graph, 1, visited)

 

 

BFS

breadth First Search, ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰

๊ฐ€๊นŒ์šด ๋…ธ๋“œ๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜.

 

BFS ๊ตฌํ˜„์—๋Š” ์„ ์ž…์„ ์ถœ ๋ฐฉ์‹์ธ ํ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ์ •์„์ด๋‹ค.

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

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

 

deque ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์œผ๋ฉฐ

ํƒ์ƒ‰์„ ์ˆ˜ํ–‰ํ•จ์— ์žˆ์–ด O(N)์˜ ์‹œ๊ฐ„์ด ์†Œ์š”๋œ๋‹ค.

์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ ์‹ค์ œ ์ˆ˜ํ–‰ ์‹œ๊ฐ„์€ DFS๋ณด๋‹ค ์ข‹์€ ํŽธ์ด๋‹ค.

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

from collections import deque

# BFS ๋ฉ”์„œ๋“œ ์ •์˜
def bfs(graph, start, visited):
    # ํ(Queue) ๊ตฌํ˜„์„ ์œ„ํ•ด deque ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ
    queue = deque([start])
    # ํ˜„์žฌ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ
    visited[start] = True
    # ํ๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
    while queue:
        # ํ์—์„œ ํ•˜๋‚˜์˜ ์›์†Œ๋ฅผ ๋ฝ‘์•„ ์ถœ๋ ฅ
        v = queue.popleft()
        print(v, end=' ')
        # ํ•ด๋‹น ์›์†Œ์™€ ์—ฐ๊ฒฐ๋œ, ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์›์†Œ๋“ค์„ ํ์— ์‚ฝ์ž…
        for i in graph[v]:
            if not visited[i]:
                queue.append(i)
                visited[i] = True

# ๊ฐ ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋œ ์ •๋ณด๋ฅผ ๋ฆฌ์ŠคํŠธ ์ž๋ฃŒํ˜•์œผ๋กœ ํ‘œํ˜„ (2์ฐจ์› ๋ฆฌ์ŠคํŠธ)
graph = [ 
... 
]

# ๊ฐ ๋…ธ๋“œ๊ฐ€ ๋ฐฉ๋ฌธ๋œ ์ •๋ณด๋ฅผ ๋ฆฌ์ŠคํŠธ ์ž๋ฃŒํ˜•์œผ๋กœ ํ‘œํ˜„ (1์ฐจ์› ๋ฆฌ์ŠคํŠธ)
visited = [False] * 9

# ์ •์˜๋œ BFS ํ•จ์ˆ˜ ํ˜ธ์ถœ
bfs(graph, 1, visited)

 

 

์ฝ”ํ…Œ ์ค‘ 2์ฐจ์› ๋ฐฐ์—ด์—์„œ์˜ ํƒ์ƒ‰ ๋ฌธ์ œ๋ฅผ ๋งŒ๋‚˜๋ฉด ๊ทธ๋ž˜ํ”„ ํ˜•ํƒœ๋กœ ๋ฐ”๊ฟ”์„œ ์ƒ๊ฐํ•˜๋ฉด ํ’€์ด ๋ฐฉ๋ฒ•์„ ์กฐ๊ธˆ ๋” ์‰ฝ๊ฒŒ ๋– ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๋‹ค.

์ฝ”ํ…Œ์—์„œ ํƒ์ƒ‰ ๋ฌธ์ œ๋ฅผ ๋ณด๋ฉด ๊ทธ๋ž˜ํ”„ ํ˜•ํƒœ๋กœ ํ‘œํ˜„ํ•œ ๋‹ค์Œ ํ’€์ด๋ฒ•์„ ๊ณ ๋ฏผํ•˜๋„๋ก ํ•˜์ž!

 

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