DFS/BFS

์ˆ˜ ๋นˆยท2022๋…„ 1์›” 6์ผ
0
post-thumbnail

๐Ÿ”Ž ์ž๋ฃŒ๊ตฌ์กฐ ๊ธฐ์ดˆ

ํƒ์ƒ‰์ด๋ž€ ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ ์ค‘์—์„œ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๋Š” ๊ณผ์ •
์ž๋ฃŒ๊ตฌ์กฐ๋ž€ '๋ฐ์ดํ„ฐ๋ฅผ ํ‘œํ˜„ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์กฐ'

ํŠนํžˆ ์Šคํƒ๊ณผ ํ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์˜ ๊ธฐ์ดˆ ๊ฐœ๋…์ด๋ฉฐ ๋‹ค์Œ์˜ ๋‘ ํ•ต์‹ฌ์ ์ธ ํ•จ์ˆ˜๋กœ ๊ตฌ์„ฑ๋จ

  • ์‚ฝ์ž…(Push): ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•จ
  • ์‚ญ์ œ(Pop): ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•จ

์ด ์™ธ์— ์˜ค๋ฒ„ํ”Œ๋กœ์™€ ์–ธ๋”ํ”Œ๋กœ๋„ ๊ณ ๋ฏผํ•ด์•ผ ํ•จ

๐Ÿ“ ์Šคํƒ

์Šคํƒ์€ ๋ฐ•์Šค ์Œ“๊ธฐ์— ๋น„์œ ํ•  ์ˆ˜ ์žˆ์Œ
์•„๋ž˜์—์„œ๋ถ€ํ„ฐ ์œ„๋กœ ์ฐจ๊ณก์ฐจ๊ณก ์Œ“๊ณ , ์•„๋ž˜์˜ ๋ฐ•์Šค๋ฅผ ์น˜์šฐ๊ธฐ ์œ„ํ•ด์„  ์œ„์˜ ๋ฐ•์Šค๋ฅผ ๋จผ์ € ๋‚ด๋ ค์•ผ ํ•จ
์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋ฅผ ์„ ์ž…ํ›„์ถœ ๊ตฌ์กฐ, ํ›„์ž…์„ ์ถœ ๊ตฌ์กฐ๋ผ๊ณ  ํ•จ

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

๐Ÿ“ ํ

ํ๋Š” ๋Œ€๊ธฐ ์ค„์— ๋น„์œ ํ•  ์ˆ˜ ์žˆ์Œ
๋‚˜์ค‘์— ์˜จ ์‚ฌ๋žŒ์ผ์ˆ˜๋ก ๋‚˜์ค‘์— ๋“ค์–ด๊ฐ, '๊ณต์ •ํ•œ' ์ž๋ฃŒ๊ตฌ์กฐ
์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋ฅผ ์„ ์ž…์„ ์ถœ ๊ตฌ์กฐ๋ผ๊ณ  ํ•จ

ํŒŒ์ด์ฌ์œผ๋กœ ํ๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ๋Š” collections ๋ชจ๋“ˆ์—์„œ ์ œ๊ณตํ•˜๋Š” deque ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•˜์ž
deque๋Š” ์Šคํƒ๊ณผ ํ์˜ ์žฅ์ ์„ ๋ชจ๋‘ ์ฑ„ํƒํ•œ ๊ฒƒ (๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ณ  ๋นผ๋Š” ์†๋„๊ฐ€ ๋ฆฌ์ŠคํŠธ ์ž๋ฃŒํ˜•์— ๋น„ํ•ด ํšจ์œจ์ , queue ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๊ฐ„๋‹จ)

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

๐Ÿ“ ์žฌ๊ท€ ํ•จ์ˆ˜

DBS์™€ BFS๋ฅผ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ์žฌ๊ท€ ํ•จ์ˆ˜๋„ ์ดํ•ดํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•จ
์žฌ๊ท€ ํ•จ์ˆ˜๋ž€ ์ž๊ธฐ ์ž์‹ ์„ ๋‹ค์‹œ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์˜๋ฏธํ•จ

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

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

์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜๋Š” ๋Œ€ํ‘œ์  ์˜ˆ์ œ๋กœ๋Š” ํŒฉํ† ๋ฆฌ์–ผ ๋ฌธ์ œ
์žฌ๊ท€ ํ•จ์ˆ˜๋Š” ์ˆ˜ํ•™์˜ ์ ํ™”์‹(์žฌ๊ท€์‹)์„ ๊ทธ๋Œ€๋กœ ์†Œ์Šค์ฝ”๋“œ๋กœ ์˜ฎ๊ฒผ๊ธฐ์— ๋ฐ˜๋ณต๋ฌธ์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋น„๊ต ํ–ˆ์„ ๋•Œ ๋”์šฑ ๊ฐ„๊ฒฐํ•œ ํ˜•ํƒœ์ž„


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

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

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

๊ทธ๋ž˜ํ”„๋Š” ํฌ๊ฒŒ 2๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ํ‘œํ˜„ ๊ฐ€๋Šฅ

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

๐Ÿ“ ์ธ์ ‘ ํ–‰๋ ฌ ๋ฐฉ์‹์€ 2์ฐจ์› ๋ฐฐ์—ด์— ๊ฐ ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋œ ํ˜•ํƒœ๋ฅผ ๊ธฐ๋กํ•˜๋Š” ๋ฐฉ์‹
ํŒŒ์ด์ฌ์—์„œ๋Š” 2์ฐจ์› ๋ฆฌ์ŠคํŠธ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Œ
์—ฐ๊ฒฐ์ด ๋˜์–ด ์žˆ์ง€ ์•Š์€ ๋…ธ๋“œ๋ผ๋ฆฌ๋Š” ๋ฌดํ•œ์˜ ๋น„์šฉ์ด๋ผ๊ณ  ์ž‘์„ฑํ•จ

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

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

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

print(graph)

# ๊ฒฐ๊ณผ
# [[0, 7, 5], [7, 0, 999999999], [5, 999999999, 0]]

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

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

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

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

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

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

print(graph)

# ๊ฒฐ๊ณผ
# [[(1, 7), (2, 5)], [(0, 7)], [(0, 5)]]

๋‘ ๋ฐฉ์‹์˜ ์ฐจ์ด

  • ๋ฉ”๋ชจ๋ฆฌ ์ธก๋ฉด
    - ์ธ์ ‘ ํ–‰๋ ฌ ๋ฐฉ์‹: ๋ชจ๋“  ๊ด€๊ณ„๋ฅผ ์ €์žฅํ•˜๊ธฐ์— ๋…ธ๋“œ ๊ฐœ์ˆ˜ ๋งŽ์„์ˆ˜๋ก ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋‚ญ๋น„๋จ
    - ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ ๋ฐฉ์‹: ์—ฐ๊ฒฐ๋œ ์ •๋ณด๋งŒ์„ ์ €์žฅํ•˜๊ธฐ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•จ
  • ์†๋„ ์ธก๋ฉด
    - ์ธ์ ‘ ํ–‰๋ ฌ ๋ฐฉ์‹: ํŠน์ •ํ•œ ๋‘ ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์–ป๋Š” ์†๋„ ๋น ๋ฆ„
    - ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ ๋ฐฉ์‹: ์—ฐ๊ฒฐ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์”ฉ ํ™•์ธํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋Š๋ฆผ

๐Ÿ”Ž DFS

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

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


๐Ÿ”Ž BFS

BFS๋Š” Breadth-First Search, ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰์ด๋ผ๊ณ ๋„ ๋ถ€๋ฅด๋ฉฐ ์‰ฝ๊ฒŒ ๋งํ•ด ๊ฐ€๊นŒ์šด ๋…ธ๋“œ๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž„

BFS ๊ตฌํ˜„์—์„œ๋Š” ์„ ์ž…์„ ์ถœ ๋ฐฉ์‹์ธ ํ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ์ •์„
DFS๋Š” ์ตœ๋Œ€ํ•œ ๋ฉ€๋ฆฌ ์žˆ๋Š” ๋…ธ๋“œ๋ฅผ ์šฐ์„ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ์‹์ธ ๋ฐ˜๋ฉด, BFS๋Š” ๊ทธ ๋ฐ˜๋Œ€
์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ BFS์˜ ์‹ค์ œ ์ˆ˜ํ–‰ ์‹œ๊ฐ„์€ DFS๋ณด๋‹ค ์ข‹์€ ํŽธ

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


๐Ÿ“ ์ •๋ฆฌ

DFSBFS
๋™์ž‘ ์›๋ฆฌ์Šคํƒํ
๊ตฌํ˜„ ๋ฐฉ๋ฒ•์žฌ๊ท€ ํ•จ์ˆ˜ ์ด์šฉํ ์ž๋ฃŒ๊ตฌ์กฐ ์ด์šฉ

โœ๏ธ ์‹ค์ „ ๋ฌธ์ œ

๐Ÿ“ ์Œ๋ฃŒ์ˆ˜ ์–ผ๋ ค ๋จน๊ธฐ

N x M ํฌ๊ธฐ์˜ ์–ผ์Œ ํ‹€์ด ์žˆ์Œ
๊ตฌ๋ฉ์ด ๋šซ๋ ค ์žˆ๋Š” ๋ถ€๋ถ„์ธ 0, ์นธ๋ง‰์ด๊ฐ€ ์กด์žฌํ•˜๋Š” ๋ถ€๋ถ„์€ 1๋กœ ํ‘œ์‹œ๋จ
๊ตฌ๋ฉ์ด ๋šซ๋ ค ์žˆ๋Š” ๋ถ€๋ถ„๋ผ๋ฆฌ ์ƒ, ํ•˜, ์ขŒ, ์šฐ๋กœ ๋ถ™์–ด ์žˆ๋Š” ๊ฒฝ์šฐ ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•จ

์ด๋•Œ ์–ผ์Œ ํ‹€์˜ ๋ชจ์–‘์ด ์ฃผ์–ด์กŒ์„ ๋•Œ ์ƒ์„ฑ๋˜๋Š” ์ด ์•„์ด์Šคํฌ๋ฆผ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

  • ์ž…๋ ฅ ์กฐ๊ฑด
    - ์ฒซ ๋ฒˆ์งธ ์ค„์— ์–ผ์Œ ํ‹€์˜ ์„ธ๋กœ ๊ธธ์ด N๊ณผ ๊ฐ€๋กœ ๊ธธ์ด M์ด ์ฃผ์–ด์ง (1 โ‰ค N, M โ‰ค 1,000)
    - ๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ N + 1๋ฒˆ์งธ ์ค„๊นŒ์ง€ ์–ผ์Œ ํ‹€์˜ ํ˜•ํƒœ๊ฐ€ ์ฃผ์–ด์ง
    - ์ด๋•Œ ๊ตฌ๋ฉ์ด ๋šซ๋ ค์žˆ๋Š” ๋ถ€๋ถ„์€ 0, ๊ทธ๋ ‡์ง€ ์•Š์€ ๋ถ€๋ถ„์€ 1
  • ์ถœ๋ ฅ ์กฐ๊ฑด
    - ํ•œ ๋ฒˆ์— ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์•„์ด์Šคํฌ๋ฆผ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•จ

๋ฌธ์ œ ํ•ด์„ค

DFS๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Œ
1. ํŠน์ •ํ•œ ์ง€์ ์˜ ์ฃผ๋ณ€ ์ƒ, ํ•˜, ์ขŒ, ์šฐ๋ฅผ ์‚ดํŽด๋ณธ ๋’ค์— ์ฃผ๋ณ€ ์ง€์  ์ค‘์—์„œ ๊ฐ’์ด '0'์ด๋ฉด์„œ ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ง€์ ์ด ์žˆ๋‹ค๋ฉด ํ•ด๋‹น ์ง€์ ์„ ๋ฐฉ๋ฌธํ•จ
2. ๋ฐฉ๋ฌธํ•œ ์ง€์ ์—์„œ ๋‹ค์‹œ ์ƒ, ํ•˜, ์ขŒ, ์šฐ๋ฅผ ์‚ดํŽด๋ณด๋ฉด์„œ ๋ฐฉ๋ฌธ์„ ๋‹ค์‹œ ์ง„ํ–‰ํ•˜๋ฉด, ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ์ง€์ ์„ ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์žˆ์Œ
3. 1 ~ 2๋ฒˆ์˜ ๊ณผ์ •์„ ๋ชจ๋“  ๋…ธ๋“œ์— ๋ฐ˜๋ณตํ•˜๋ฉฐ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ง€์ ์˜ ์ˆ˜๋ฅผ ์…ˆ

์†Œ์Šค์ฝ”๋“œ


๐Ÿ“ ๋ฏธ๋กœ ํƒˆ์ถœ

์ฃผ์ธ๊ณต์€ N x M ํฌ๊ธฐ์˜ ์ง์‚ฌ๊ฐํ˜• ํ˜•ํƒœ์˜ ๋ฏธ๋กœ์— ๊ฐ‡ํ˜€ ์žˆ์Œ
๋ฏธ๋กœ์—๋Š” ์—ฌ๋Ÿฌ ๋งˆ๋ฆฌ์˜ ๊ดด๋ฌผ์ด ์žˆ์–ด ์ด๋ฅผ ํ”ผํ•ด ํƒˆ์ถœํ•ด์•ผ ํ•จ
์ฃผ์ธ๊ณต์˜ ์œ„์น˜๋Š” (1, 1)์ด๊ณ  ๋ฏธ๋กœ์˜ ์ถœ๊ตฌ๋Š” (N, M)์˜ ์œ„์น˜์— ์กด์žฌํ•˜๋ฉฐ ํ•œ ๋ฒˆ์— ํ•œ ์นธ์”ฉ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Œ
์ด๋•Œ ๊ดด๋ฌผ์ด ์žˆ๋Š” ๋ถ€๋ถ„์€ 0, ๊ดด๋ฌผ์ด ์—†๋Š” ๋ถ€๋ถ„์€ 1๋กœ ํ‘œ์‹œ๋˜์–ด ์žˆ์Œ
๋ฏธ๋กœ๋Š” ๋ฐ˜๋“œ์‹œ ํƒˆ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ์ œ์‹œ๋จ

์ด๋•Œ ์ฃผ์ธ๊ณต์ด ํƒˆ์ถœํ•˜๊ธฐ ์œ„ํ•ด ์›€์ง์—ฌ์•ผ ํ•˜๋Š” ์ตœ์†Œ ์นธ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜์‹œ์˜ค
(์นธ์„ ์…€ ๋•Œ๋Š” ์‹œ์ž‘ ์นธ๊ณผ ๋งˆ์ง€๋ง‰ ์นธ์„ ๋ชจ๋‘ ํฌํ•จํ•ด์„œ ๊ณ„์‚ฐํ•จ)

  • ์ž…๋ ฅ ์กฐ๊ฑด
    - ์ฒซ์งธ ์ค„์— ๋‘ ์ •์ˆ˜ N, M(4 โ‰ค N, M โ‰ค 200)์ด ์ฃผ์–ด์ง,
    ย  ๋‹ค์Œ N๊ฐœ์˜ ์ค„์—๋Š” ๊ฐ๊ฐ M๊ฐœ์˜ ์ •์ˆ˜(0 ํ˜น์€ 1)๋กœ ๋ฏธ๋กœ์˜ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์ง,
    ย  ๊ฐ๊ฐ์˜ ์ˆ˜๋“ค์€ ๊ณต๋ฐฑ ์—†์ด ๋ถ™์–ด์„œ ์ž…๋ ฅ์œผ๋กœ ์ œ์‹œ๋จ ๋˜ํ•œ ์‹œ์ž‘ ์นธ๊ณผ ๋งˆ์ง€๋ง‰ ์นธ์€ ํ•ญ์ƒ 1์ž„
  • ์ถœ๋ ฅ ์กฐ๊ฑด
    - ์ฒซ์งธ ์ค„์— ์ตœ์†Œ ์ด๋™ ์นธ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•จ

๋ฌธ์ œ ํ•ด์„ค

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

(1, 1) ์ง€์ ์—์„œ๋ถ€ํ„ฐ BFS๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ๋ชจ๋“  ๋…ธ๋“œ์˜ ๊ฐ’์„ ๊ฑฐ๋ฆฌ ์ •๋ณด๋กœ ๋„ฃ์œผ๋ฉด ๋จ
ํŠน์ •ํ•œ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•˜๋ฉด ๊ทธ ์ด์ „ ๋…ธ๋“œ์˜ ๊ฑฐ๋ฆฌ์— 1์„ ๋”ํ•œ ๊ฐ’์„ ๋ฆฌ์ŠคํŠธ์— ๋„ฃ์Œ

์†Œ์Šค์ฝ”๋“œ


๐Ÿ“’ ์ด๊ฒƒ์ด ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋‹ค ๊ต์žฌ๋ฅผ ํ†ตํ•ด ํ•™์Šตํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€