๊ณ์ ๋ฏธ๋ค๋จ๋ DFS/BFS ๊ฐ๋ ์ ๊ณต๋ถํ ํ ๋ฐฑ์ค์์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋ฌธ์ ๋ก ๋ณด์ด๋ ๊ฑธ ํ์ด๋ดค๋๋ฐ ์ฌ๋ฌ ๋ฒ์ ์๋ ๋์ ์ด์ฐ์ ์ฐ ๋ง์๋ค. ํ์ง๋ง ์์ ์ฌ์ง์ฒ๋ผ ์ ๋ต๊น์ง ๊ฐ๋ ๊ณผ์ ์ด ๊ฝค ํ๋ํ๊ธฐ ๋๋ฌธ์ ์ฝ๋๋ฅผ ๋ณต๊ธฐํด๋ณด๋ ค๊ณ ํ๋ค.
๋ฌธ์
์ ์ถ๋ ฅ ์์
์์ด๋์ด ํ๋ฆ
์ฝ๋์ ํฐ ํ์ ์๋์ฒ๋ผ ์๊ฐํ๋ค.
1) ๊ทธ๋ํ ํํ ํํ ๋ฐฉ๋ฒ? 2์ฐจ์ ๋ฐฐ์ด ํํ๋ก ๋ง๋ค๊ธฐ
2) DFS ๊ตฌํ? ์คํ ๊ตฌ์กฐ๋ ์ฌ๊ท ํจ์ ์ฌ์ฉ
3) BFS ๊ตฌํ? ํ ์ฌ์ฉ
๋ฐํ์ ์๋ฌ
1) AttributeError
์๊ณ ๋ฆฌ์ฆ ์ค๋๋ง์ ํ์๋๋ ๋๋ ๋ชจ๋ฅด๋ ์ฌ์ด์ ๊น๋จน์๋์ง input ํจ์์ ๊ดํธ๋ฅผ ์ ์ผ๋ค!^^
2) TypeError
์ฌ์ค ํ์ ์๋ฌ๋ ์ ํํ๊ฒ ์ด๋์ ๋ ๊ฑด์ง ์์ง๋ ๋ชจ๋ฅด๊ฒ ๋ค. int๋ฅผ ์จ์ผํ๋๋ฐ char๋ฅผ ์ผ๋ค๋๊ฐ ์ด๋ด ๋ ๋๋ ์๋ฌ๋ผ๋๋ฐ ์ด์ ๋ ๋ชป ์ฐพ์๊ณ ํ๋ ธ์ผ๋๊น ๊ณ ์ณ์ผ๊ฒ ๋ค ์ด ์๊ฐ์ด ์ปธ๋ ๊ฒ ๊ฐ๋ค.
์๊ฐ ์ด๊ณผ
# DFS
for j in range(1, n+1):
# ์ถ๋ฐ์ v์ ์ธ์ ๋
ธ๋์ด์ง๋ง ๋ฐฉ๋ฌธํ ์ ์ด ์๋ ๋
ธ๋
if visited[j] == 0 and adjMatrix[v][j] == 1:
dfs(j)
# BFS
while q:
v = q.popleft()
print(v, end=' ')
# ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ ๋์ง ์์ ์ธ์ ๋
ธ๋ ๋ชจ๋ ํ์ ์ฝ์
for k in range(1, n+1):
if k not in visited and adjMatrix[v][k] == 1:
q.append(k)
visited[k] = 1
์ฌ๊ท ๋๋ฌธ์ ๊ทธ๋ฐ๊ฐ ์ถ์ด์ ์ฌ๊ท ๊น์ด๋ฅผ ๋ ๊น๊ฒ ์ค์ ํ๋ ค๋ค๊ฐ https://hjp845.tistory.com/32 ์ด ๊ธ์ ๋ณด๊ณ ๋ ธ๋ ํ์ธ, ๋ฐฉ๋ฌธ ์ฒดํฌ ์์๋ฅผ ๋ฐ๊ฟ์ฃผ์๋ค.
์ถ๋ ฅ ์ด๊ณผ
BFS์์ ๋ฌดํ๋ฃจํ ๊ฑธ๋ ธ์ ๋ ์ถ๋ ฅ ์ด๊ณผ์๋ค.
์์ ํ ํ๋ฆฐ ๊ฒฝ์ฐ
์ด๊ฒ ๋๋ฌธ์ ๊ณ ๋ฏผ์ ์ ๋ง ๋ง์ด ํ๋ค. ์์ ์ ๋ ฅ 2๋ฅผ ๋ฃ์ผ๋ฉด BFS ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ 3 1 4 2 5๊ฐ ๋์์ผ ํ๋๋ฐ ๊ณ์ 3 1 4๊น์ง๋ง ๋์์ ์ ๋๊น์ง ํ์์ ๋ชปํ ๊น ์ด ์๊ฐ์ ๊ณ์ ํ๋ค.
์ต์ข ์ฝ๋
์์ ์ ์ ์๋ฌ๋ค์ ํ๋์ฉ ํด๊ฒฐํ๋ฉด์ ์ ์ถํ ์ต์ข ์ฝ๋๋ ์๋์ ๊ฐ๋ค.
import sys
from collections import deque
n, m, v = map(int, input().split())
# ์ธ๋ฑ์ค ํท๊ฐ๋ฆฌ์ง ์๊ฒ ํ๋ ค๊ณ (n+1)*(n+1) ํฌ๊ธฐ์ ์ธ์ ํ๋ ฌ ์์ฑ
adjMatrix = [[0]*(n+1) for _ in range(n+1)]
# ๋ฐฉ๋ฌธ ์ฒดํฌ์ฉ ๋ฐฐ์ด ์์ฑ
visited = [0]*(n+1)
for i in range(m):
a, b = map(int, sys.stdin.readline().split())
# ์๋ฐฉํฅ ์ฐ๊ฒฐ์ ์๋ฏธ
adjMatrix[a][b] = adjMatrix[b][a] = 1
def dfs(v):
visited[v] = 1
print(v, end=' ')
for j in range(1, n+1):
# ์ถ๋ฐ์ v์ ์ธ์ ๋
ธ๋์ด์ง๋ง ๋ฐฉ๋ฌธํ ์ ์ด ์๋ ๋
ธ๋
if adjMatrix[v][j] == 1 and visited[j] == 0 :
dfs(j)
def bfs(V):
bfsVisited = [V]
q = deque() # ํ ์์ฑ
q.append(V) # ๋ฐฉ๋ฌธ ์ฒ๋ฆฌํ ๋
ธ๋๋ ํ์ ์ฝ์
while q:
pop = q.popleft()
print(pop, end=' ')
# ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ ๋์ง ์์ ์ธ์ ๋
ธ๋ ๋ชจ๋ ํ์ ์ฝ์
for k in range(len(adjMatrix[V])):
if adjMatrix[pop][k] == 1 and (k not in bfsVisited):
q.append(k)
bfsVisited.append(k)
dfs(v)
print()
bfs(v)
์ ๋ฆฌ
๋ชจ๋ ์ฝ๋๋ค์ ์์ด๋์ด ํ๋ฆ์ ๋์ผํ๊ณ ์ต์ข ์ฝ๋์ ์ด์ ์ฝ๋๋ค์ ํฐ ์ฐจ์ด์ ์ ์ ๋ฆฌํด๋ณด๋ฉด
1) ๋ฐฉ๋ฌธ ์ฒดํฌ์ฉ ๋ฐฐ์ด ์ฌ์ฉ ๋ฐฉ๋ฒ
์ ์ญ ๋ณ์๋ก ๋ฐฉ๋ฌธ ๊ฒ์ฌ๋ฅผ ์ํ ๋ฐฐ์ด์ ํ๋ ๋ง๋ค๊ณ DFS์์๋ ๋ฐฉ๋ฌธํ ๋ ธ๋ ๋ฒํธ์ ๋์ผํ ์ธ๋ฑ์ค ๊ฐ์ 1๋ก, BFS์์๋ ์ด๋ฏธ 1๋ก ๋ฐ๋ ์ธ๋ฑ์ค๋ค์ด ์๊ธฐ ๋๋ฌธ์ ๋ฐฉ๋ฌธํ์ ๊ฒฝ์ฐ 0์ผ๋ก ๋ฐ๊ฟ์ฃผ๋ ๋ฐฉ์์ ์ฌ์ฉํ์๋ค. ๊ทผ๋ฐ ์ด ๋ฐฉ๋ฒ์ผ๋ก ํ๋๊น ๋ด๊ฐ ํท๊ฐ๋ ค์ BFS๋ ํจ์ ์์์ ๋ฐฉ๋ฌธ ์ฒดํฌ์ฉ ๋ฐฐ์ด์ ๋ฐ๋ก ๋ง๋ค์๋ค.
2) for k in range(len(adjMatrix[V]))
for k in range(1, n+1) ์ด๊ฑธ๋ก ๊ณ์ ์ฝ๋๋ฅผ ์ง๋ค๊ฐ BFS์์๋ง ๊ฐ์ด ์ ๋๋ก ์ ๋์ค๋๊น ๋ค๋ฅธ ๋ถ๋ค์ BFS ์ฝ๋์ ๋ด ๊ฑธ ํ๋ํ๋ ๋น๊ตํ๋ฉด์ ๊ณ ์น ๋ถ๋ถ์ด๋ค. ๋ด๊ฐ ์ดํดํ ๋ฐฉ์์ '๋ ธ๋ V์ ์ฐ๊ฒฐ๋ ์ธ์ ๋ ธ๋ ์๋งํผ ๋ฐ๋ณต๋ฌธ์ ๋๋ฆฐ๋ค' ๋ ๊ฒ์ธ๋ฐ ๋ง๊ฒ ์ดํดํ๊ฑด์ง๋ ํ์ ์ด ์๋ค ๐
์์ผ๋ก ๋ฌธ์ ๋ฅผ ๋ง์ด ํ์ด๋ด์ผ๊ฒ ๋ค.
'Problem Solving > BOJ & Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 11256๋ฒ: Jelly Bean (0) | 2022.02.03 |
---|---|
[BOJ] 5177๋ฒ: Format Error! (0) | 2022.02.03 |
[BOJ] 1806๋ฒ: Subsequence (๋ถ๋ถํฉ) (0) | 2021.07.13 |
[BOJ] 2003๋ฒ: ์๋ค์ ํฉ 2 (0) | 2021.07.09 |
[BOJ] 1991๋ฒ: ํธ๋ฆฌ ์ํ (0) | 2021.07.07 |