โœจDFS & BFS

eziยท2023๋…„ 9์›” 8์ผ
0

์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ชฉ๋ก ๋ณด๊ธฐ
7/11

๐Ÿ”Š๋ณธ ํฌ์ŠคํŒ…์€ '(์ด์ฝ”ํ…Œ 2021) ์ด๊ฒƒ์ด ์ทจ์—…์„ ์œ„ํ•œ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋‹ค with ํŒŒ์ด์ฌ' ์œ ํŠœ๋ธŒ ๊ฐ•์˜๋ฅผ ์ˆ˜๊ฐ•ํ•˜๊ณ  ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

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

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

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

[ DFS ๋™์ž‘ ์˜ˆ์‹œ ]

  • ๋ฐฉ๋ฌธ ๊ธฐ์ค€: ๋ฒˆํ˜ธ๊ฐ€ ๋‚ฎ์€ ์ธ์ ‘ ๋…ธ๋“œ๋ถ€ํ„ฐ

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

[Step 2] ์Šคํƒ์˜ ์ตœ์ƒ๋‹จ ๋…ธ๋“œ์ธ '1'์— ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ธ์ ‘ ๋…ธ๋“œ '2','3','8'์ด ์žˆ๋‹ค.
์ด ์ค‘์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๋…ธ๋“œ์ธ '2'๋ฅผ ์Šคํƒ์— ๋„ฃ๊ณ  ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค.

[Step 3] ์Šคํƒ์˜ ์ตœ์ƒ๋‹จ ๋…ธ๋“œ์ธ '2'์— ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ธ์ ‘ ๋…ธ๋“œ '7'์ด ์žˆ๋‹ค.
๋”ฐ๋ผ์„œ '7'๋ฒˆ ๋…ธ๋“œ๋ฅผ ์Šคํƒ์— ๋„ฃ๊ณ  ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค.

[Step 4] ์Šคํƒ์˜ ์ตœ์ƒ๋‹จ ๋…ธ๋“œ์ธ '7'์— ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ธ์ ‘ ๋…ธ๋“œ '6','8'์ด ์žˆ๋‹ค.
์ด ์ค‘์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๋…ธ๋“œ์ธ '6'์„ ์Šคํƒ์— ๋„ฃ๊ณ  ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค.

[Step 5] ์Šคํƒ์˜ ์ตœ์ƒ๋‹จ ๋…ธ๋“œ์ธ '6'์— ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ธ์ ‘ ๋…ธ๋“œ๊ฐ€ ์—†๋‹ค.
๋”ฐ๋ผ์„œ ์Šคํƒ์—์„œ '6'๋ฒˆ ๋…ธ๋“œ๋ฅผ ๊บผ๋‚ธ๋‹ค.

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

์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜์˜€์„ ๋•Œ ์ „์ฒด ๋…ธ๋“œ์˜ ํƒ์ƒ‰ ์ˆœ์„œ(์Šคํƒ์— ๋“ค์–ด๊ฐ„ ์ˆœ์„œ)๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
ํƒ์ƒ‰ ์ˆœ์„œ: 1 โ†’ 2 โ†’ 7 โ†’ 6 โ†’ 8 โ†’ 3 โ†’ 4 โ†’ 5

โœจ DFS ์†Œ์Šค์ฝ”๋“œ ์˜ˆ์ œ

# DFS ๋ฉ”์„œ๋“œ ์ •์˜
def dfs(graph, v, visited):
	# ํ˜„์žฌ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ
    visited[v] = True
    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์ฐจ์› ๋ฆฌ์ŠคํŠธ)
# ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ๊ฐ’๋“ค์„ False๋กœ ์ดˆ๊ธฐํ™”ํ•˜๊ณ , index 0์€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
visited = [False]*9

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

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

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

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

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

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

[ BFS ๋™์ž‘ ์˜ˆ์‹œ ]

  • ๋ฐฉ๋ฌธ ๊ธฐ์ค€: ๋ฒˆํ˜ธ๊ฐ€ ๋‚ฎ์€ ์ธ์ ‘ ๋…ธ๋“œ๋ถ€ํ„ฐ

[Step 1] ์‹œ์ž‘ ๋…ธ๋“œ์ธ '1'์„ ํ์— ์‚ฝ์ž…ํ•˜๊ณ  ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค.

[Step 2] ํ์—์„œ ๋…ธ๋“œ '1'์„ ๊บผ๋‚ด ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ธ์ ‘๋…ธ๋“œ '2','3','8'์„ ํ์— ์‚ฝ์ž…ํ•˜๊ณ  ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌํ•œ๋‹ค.

[Step 3] ํ์—์„œ ๋…ธ๋“œ '2'๋ฅผ ๊บผ๋‚ด ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ธ์ ‘ ๋…ธ๋“œ '7'์„ ํ์— ์‚ฝ์ž…ํ•˜๊ณ  ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌํ•œ๋‹ค.

[Step 4] ํ์—์„œ ๋…ธ๋“œ '3'์„ ๊บผ๋‚ด ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ธ์ ‘ ๋…ธ๋“œ '4','5'๋ฅผ ํ์— ์‚ฝ์ž…ํ•˜๊ณ  ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌํ•œ๋‹ค.

[Step 5] ํ์—์„œ ๋…ธ๋“œ '8'์„ ๊บผ๋‚ด๊ณ  ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ธ์ ‘ ๋…ธ๋“œ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๋ฌด์‹œํ•œ๋‹ค.

์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜์—ฌ ์ „์ฒด ๋…ธ๋“œ์˜ ํƒ์ƒ‰ ์ˆœ์„œ(ํ์— ๋“ค์–ด๊ฐ„ ์ˆœ์„œ)๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
ํƒ์ƒ‰ ์ˆœ์„œ: 1 โ†’ 2 โ†’ 3 โ†’ 8 โ†’ 7 โ†’ 4 โ†’ 5 โ†’ 6

๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ธ BFS๋Š” ํ ์ž๋ฃŒ๊ตฌ์กฐ์— ๊ธฐ์ดˆํ•œ๋‹ค๋Š” ์ ์—์„œ ๊ตฌํ˜„์ด ๊ฐ„๋‹จํ•˜๋‹ค.
ํƒ์ƒ‰์„ ์ˆ˜ํ–‰ํ•จ์— ์žˆ์–ด O(N)์˜ ์‹œ๊ฐ„์ด ์†Œ์š”๋˜๋ฉฐ, ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ ์‹ค์ œ ์ˆ˜ํ–‰ ์‹œ๊ฐ„์€ 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 = [
	[],
    [2,3,8],
    [1,7],
    [1,4,5],
    [3,5],
    [3,4],
	[7],
    [2,6,8],
    [1,7]
]

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

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

[ ์˜ˆ์ œ 1 ] ์Œ๋ฃŒ์ˆ˜ ์–ผ๋ ค ๋จน๊ธฐ

๋ฌธ์ œ ์„ค๋ช…

NXM ํฌ๊ธฐ์˜ ์–ผ์Œ ํ‹€์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ตฌ๋ฉ์ด ๋šซ๋ ค ์žˆ๋Š” ๋ถ€๋ถ„์€ 0, ์นธ๋ง‰์ด๊ฐ€ ์กด์žฌํ•˜๋Š” ๋ถ€๋ถ„์€ 1๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

๊ตฌ๋ฉ์ด ๋šซ๋ ค ์žˆ๋Š” ๋ถ€๋ถ„๋ผ๋ฆฌ ์ƒ,ํ•˜,์ขŒ,์šฐ๋กœ ๋ถ™์–ด ์žˆ๋Š” ๊ฒฝ์šฐ ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•œ๋‹ค.

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

๋‹ค์Œ์˜ 4X5 ์–ผ์Œ ํ‹€ ์˜ˆ์‹œ์—์„œ๋Š” ์•„์ด์Šคํฌ๋ฆผ์ด ์ด 3๊ฐœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ ํ•ด๊ฒฐ

  • DFS๋ฅผ ํ™œ์šฉ

์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. ํŠน์ •ํ•œ ์ง€์ ์˜ ์ฃผ๋ณ€ ์ƒ,ํ•˜,์ขŒ,์šฐ๋ฅผ ์‚ดํŽด๋ณธ ๋’ค์— ์ฃผ๋ณ€ ์ง€์  ์ค‘์—์„œ ๊ฐ’์ด '0'์ด๋ฉด์„œ ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ง€์ ์ด ์žˆ๋‹ค๋ฉด ํ•ด๋‹น ์ง€์ ์„ ๋ฐฉ๋ฌธํ•œ๋‹ค.

  2. ๋ฐฉ๋ฌธํ•œ ์ง€์ ์—์„œ ๋‹ค์‹œ ์ƒ,ํ•˜,์ขŒ,์šฐ๋ฅผ ์‚ดํŽด๋ณด๋ฉด์„œ ๋ฐฉ๋ฌธ์„ ์ง„ํ–‰ํ•˜๋Š” ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋ฉด, ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ์ง€์ ์„ ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์žˆ๋‹ค.

  3. ๋ชจ๋“  ๋…ธ๋“œ์— ๋Œ€ํ•˜์—ฌ 1~2๋ฒˆ์˜ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋ฉฐ, ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ง€์ ์˜ ์ˆ˜๋ฅผ ์นด์šดํŠธํ•œ๋‹ค.

# DFS๋กœ ํŠน์ • ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•˜๊ณ  ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ๋…ธ๋“œ๋“ค๋„ ๋ฐฉ๋ฌธ
def dfs(x,y):
	# ์ฃผ์–ด์ง„ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ฆ‰์‹œ ์ข…๋ฃŒ
    if x<=-1 or x>=n or y<=-1 or y>=m:
    	return False
    # ํ˜„์žฌ ๋…ธ๋“œ๋ฅผ ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด
    if graph[x][y] == 0:
    	# ํ•ด๋‹น ๋…ธ๋“œ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ
        graph[x][y] = 1
        # ์ƒ,ํ•˜,์ขŒ,์šฐ์˜ ์œ„์น˜๋“ค๋„ ๋ชจ๋‘ ์žฌ๊ท€์ ์œผ๋กœ ํ˜ธ์ถœ
        dfs(x-1, y)
        dfs(x, y-1)
        dfs(x+1, y)
        dfs(x, y+1)
        return True
    return False

# N, M์„ ๊ณต๋ฐฑ์„ ๊ธฐ์ค€์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ž…๋ ฅ ๋ฐ›๊ธฐ
n, m = map(int, input().split())

# 2์ฐจ์› ๋ฆฌ์ŠคํŠธ์˜ ๋งต ์ •๋ณด ์ž…๋ ฅ ๋ฐ›๊ธฐ
graph = []
for i in range(n):
	graph.append(list(map(int, input())))

# ๋ชจ๋“  ๋…ธ๋“œ(์œ„์น˜)์— ๋Œ€ํ•˜์—ฌ ์Œ๋ฃŒ์ˆ˜ ์ฑ„์šฐ๊ธฐ
result = 0
for i in range(n):
	for j in range(m):
    	# ํ˜„์žฌ ์œ„์น˜์—์„œ DFS ์ˆ˜ํ–‰
        if dfs(i,j) == True:
        	result += 1

print(result)  # ์ •๋‹ต ์ถœ๋ ฅ

[ ์˜ˆ์ œ 2 ] ๋ฏธ๋กœ ํƒˆ์ถœ

๋ฌธ์ œ ์„ค๋ช…

๋™๋นˆ์ด๋Š” NXM ํฌ๊ธฐ์˜ ์ง์‚ฌ๊ฐํ˜• ํ˜•ํƒœ์˜ ๋ฏธ๋กœ์— ๊ฐ‡ํ˜”์Šต๋‹ˆ๋‹ค.

๋ฏธ๋กœ์—๋Š” ์—ฌ๋Ÿฌ ๋งˆ๋ฆฌ์˜ ๊ดด๋ฌผ์ด ์žˆ์–ด ์ด๋ฅผ ํ”ผํ•ด ํƒˆ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋™๋นˆ์ด์˜ ์œ„์น˜๋Š” (1,1)์ด๋ฉฐ ๋ฏธ๋กœ์˜ ์ถœ๊ตฌ๋Š” (N,M)์˜ ์œ„์น˜์— ์กด์žฌํ•˜๋ฉฐ ํ•œ ๋ฒˆ์— ํ•œ ์นธ์”ฉ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋•Œ ๊ดด๋ฌผ์ด ์žˆ๋Š” ๋ถ€๋ถ„์€ 0์œผ๋กœ, ๊ดด๋ฌผ์ด ์—†๋Š” ๋ถ€๋ถ„์€ 1๋กœ ํ‘œ์‹œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฏธ๋กœ๋Š” ๋ฐ˜๋“œ์‹œ ํƒˆ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ์ œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์ด๋•Œ ๋™๋นˆ์ด๊ฐ€ ํƒˆ์ถœํ•˜๊ธฐ ์œ„ํ•ด ์›€์ง์—ฌ์•ผ ํ•˜๋Š” ์ตœ์†Œ ์นธ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜์„ธ์š”.

์นธ์„ ์…€ ๋•Œ๋Š” ์‹œ์ž‘ ์นธ๊ณผ ๋งˆ์ง€๋ง‰ ์นธ์„ ๋ชจ๋‘ ํฌํ•จํ•ด์„œ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ ํ’€์ด

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

[Step 1] ์ฒ˜์Œ์— (1,1)์˜ ์œ„์น˜์—์„œ ์‹œ์ž‘ํ•œ๋‹ค.

Step 2 ์ขŒํ‘œ์—์„œ ์ƒ,ํ•˜,์ขŒ,์šฐ๋กœ ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•˜๋ฉด ๋ฐ”๋กœ ์˜† ๋…ธ๋“œ์ธ (1,2) ์œ„์น˜์˜ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•˜๊ฒŒ ๋˜๊ณ  ์ƒˆ๋กญ๊ฒŒ ๋ฐฉ๋ฌธํ•˜๋Š” (1,2) ๋…ธ๋“œ์˜ ๊ฐ’์„ 2๋กœ ๋ฐ”๊พธ๊ฒŒ ๋œ๋‹ค.

[Step 3] ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ BFS๋ฅผ ๊ณ„์† ์ˆ˜ํ–‰ํ•˜๋ฉด ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ตœ๋‹จ ๊ฒฝ๋กœ์˜ ๊ฐ’๋“ค์ด 1์”ฉ ์ฆ๊ฐ€ํ•˜๋Š” ํ˜•ํƒœ๋กœ ๋ณ€๊ฒฝ๋œ๋‹ค.

# BFS ์†Œ์Šค์ฝ”๋“œ ๊ตฌํ˜„
def bfs(x,y):
	# ํ(Queue) ๊ตฌํ˜„์„ ์œ„ํ•ด deque ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ
    queue = deque()
    queue.append((x,y))
	
    # ํ๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๊ธฐ
    while queue:
    	x,y =queue.popleft()
        # ํ˜„์žฌ ์œ„์น˜์—์„œ 4๊ฐ€์ง€ ๋ฐฉํ–ฅ์œผ๋กœ์˜ ์œ„์น˜ ํ™•์ธ
        for i in range(4):
        	nx = x+dx[i]
            ny = y+dy[i]
            # ๋ฏธ๋กœ ์ฐพ๊ธฐ ๊ณต๊ฐ„์„ ๋ฒ—์–ด๋‚œ ๊ฒฝ์šฐ ๋ฌด์‹œ
            if nx<0 or nx>=n or ny<0 or ny>=m:
            	continue
            # ๋ฒฝ์ธ ๊ฒฝ์šฐ ๋ฌด์‹œ
            if graph[nx][ny] == 0:
            	continue
            # ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ์ฒ˜์Œ ๋ฐฉ๋ฌธํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๊ธฐ๋ก
            if graph[nx][ny] == 1:
            	graph[nx][ny] = graph[x][y]+1
                queue.append((nx,ny))
                
    # ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ์•„๋ž˜๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๋ฐ˜ํ™˜
    return graph[n-1][m-1]
    
from collections import deque

# N,M์„ ๊ณต๋ฐฑ์„ ๊ธฐ์ค€์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ž…๋ ฅ ๋ฐ›๊ธฐ
n,m = map(int, input().split())

# 2์ฐจ์› ๋ฆฌ์ŠคํŠธ์˜ ๋งต ์ •๋ณด ์ž…๋ ฅ ๋ฐ›๊ธฐ
graph = []
for i in range(n):
	graph.append(list(map(int, input())))
    
# ์ด๋™ํ•  ๋„ค ๊ฐ€์ง€ ๋ฐฉํ–ฅ ์ •์˜(์ƒ,ํ•˜,์ขŒ,์šฐ)
dx = [-1,1,0,0]
dy = [0,0,-1,1]

# BFS๋ฅผ ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ ์ถœ๋ ฅ
print(bfs(0,0))

์š”์•ฝํ•˜์ž๋ฉด,DFS, BFS ๋ฌธ์ œ ๊ตฌ๋ถ„

  • DFS: ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ
  • BFS: ์ตœ๋‹จ๊ฑฐ๋ฆฌ ๋˜๋Š” ์ตœ์†ŒํšŸ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ
profile
์ฐจ๊ณก์ฐจ๊ณก

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