[Baekjoon/๐ฅSilverโ ก] 1260: DFS์ BFS
๐๋ฌธ์
๊ทธ๋ํ๋ฅผ DFS๋ก ํ์ํ ๊ฒฐ๊ณผ์ BFS๋ก ํ์ํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ๋จ, ๋ฐฉ๋ฌธํ ์ ์๋ ์ ์ ์ด ์ฌ๋ฌ ๊ฐ์ธ ๊ฒฝ์ฐ์๋ ์ ์ ๋ฒํธ๊ฐ ์์ ๊ฒ์ ๋จผ์ ๋ฐฉ๋ฌธํ๊ณ , ๋ ์ด์ ๋ฐฉ๋ฌธํ ์ ์๋ ์ ์ด ์๋ ๊ฒฝ์ฐ ์ข ๋ฃํ๋ค. ์ ์ ๋ฒํธ๋ 1๋ฒ๋ถํฐ N๋ฒ๊น์ง์ด๋ค.
๐์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ ์ ์ ๊ฐ์ N(1 โค N โค 1,000), ๊ฐ์ ์ ๊ฐ์ M(1 โค M โค 10,000), ํ์์ ์์ํ ์ ์ ์ ๋ฒํธ V๊ฐ ์ฃผ์ด์ง๋ค. ๋ค์ M๊ฐ์ ์ค์๋ ๊ฐ์ ์ด ์ฐ๊ฒฐํ๋ ๋ ์ ์ ์ ๋ฒํธ๊ฐ ์ฃผ์ด์ง๋ค. ์ด๋ค ๋ ์ ์ ์ฌ์ด์ ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ ์ด ์์ ์ ์๋ค. ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ ๊ฐ์ ์ ์๋ฐฉํฅ์ด๋ค.
๐์ถ๋ ฅ
์ฒซ์งธ ์ค์ DFS๋ฅผ ์ํํ ๊ฒฐ๊ณผ๋ฅผ, ๊ทธ ๋ค์ ์ค์๋ BFS๋ฅผ ์ํํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค. V๋ถํฐ ๋ฐฉ๋ฌธ๋ ์ ์ ์์๋๋ก ์ถ๋ ฅํ๋ฉด ๋๋ค.
๐โโ๏ธ์ ๊ทผ ๋ฐฉ๋ฒ
๐ฉ ์ฐ์ ๋ฌธ์ ์์ ์๊ตฌํ๋ DFS์ BFS๊ฐ ๋ฌด์์ธ์ง๋ฅผ ์์์ผ ํ๋ค. ํด๋น ๊ฐ๋ ์ ๋ํด์๋ ์ด์ 18352: ํน์ ๊ฑฐ๋ฆฌ์ ๋์ ์ฐพ๊ธฐ ๋ฌธ์ ๋ฅผ ํ์ดํ๋ฉด์ ์ ๋ฆฌํด๋ณด์๋ค!!
๐ฉ ํด๋น ๋ฌธ์ ์์ ๊ฐ์ ๋ค์ ๋ชจ๋ ์๋ฐฉํฅ์ด๋ค. ์ฆ, [1, 2]๊ฐ ์ฃผ์ด์ก์ ๋, 1์์ ์ถ๋ฐํด 2๋ก ๊ฐ ์๋ ์์ผ๋ฉฐ, 2์์ ์ถ๋ฐํด 1๋ก ๊ฐ ์๋ ์๋ค.
- ๋ฐ๋ผ์ N๊ฐ์ ์ ์ ์ด ์กด์ฌํ ๋, ๊ฐ์ ์ ์กด์ฌ์ฌ๋ถ๋ฅผ ๊ธฐ๋กํ๊ธฐ ์ํด N*N ๋ฆฌ์คํธ๋ฅผ ์์ฑํด์ผ ํ๋ค.
- ์๋ฐฉํฅ์ด๋ฏ๋ก [1,2]๊ฐ ๊ฐ์ ์ผ๋ก ์ฃผ์ด์ก์ ๋๋ 1ํ 2์ด๋ฟ๋ง ์๋๋ผ 2ํ 1์ด์๋ ๊ฐ์ ์ด ์กด์ฌํจ์ ํ์ํด์ผ ํ๋ค.
๐โโ๏ธ BFS: ๋์ด ์ฐ์ ํ์
-
์์์ ์ด 1์ผ ๊ฒฝ์ฐ, 1๊ณผ ์ฐ๊ฒฐ๋ ๋ชจ๋ ์ ์ ์ ์์ ์๋ถํฐ ์ฐจ๋ก๋ก ํ์ํ๋ค.
- ๋์ด์ 1๊ณผ ์ฐ๊ฒฐ๋ ์ ์ ์ด ์์ ๊ฒฝ์ฐ, 1 ๋ค์์ผ๋ก ํ์์ด ์งํ๋ ์ ์ ๊ณผ ์ฐ๊ฒฐ๋ ๋ชจ๋ ์ ์ ์ ํ์ํ๋ค.
- ํด๋น ์์์ ๋ง๋ ์ ์ ์ ์๋ง๊ฒ ๊ฐ์ ธ์ค๊ธฐ ์ํด์๋ ์๋ฐฉํฅ ํ์ธ deque์ ์ฌ์ฉํ๋ค.
- ๊ทธ๋ํ์ ์กด์ฌํ๋ ๋ชจ๋ ์ ์ ์ด ํ์๋ ๋๊น์ง ์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
๐โโ๏ธ DFS: ๊น์ด ์ฐ์ ํ์
- ์์์ ์ด 1์ผ ๊ฒฝ์ฐ, 1๊ณผ ์ฐ๊ฒฐ๋ ๊ฐ์ฅ ์์ ์ ์ ์ ๋ค์์ผ๋ก ํ์ํ๋ค.
- ์ฆ ํด๋น ์ ์ ์ ํ๋ผ๋ฏธํฐ๋ก ๊น์ด ์ฐ์ ํ์์ ๋ค์ ์งํํ๋ค. (์ฌ๊ท)
- ๊ทธ๋ํ์ ์กด์ฌํ๋ ๋ชจ๋ ์ ์ ์ด ํ์๋ ๋๊น์ง ์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
๐ฉโ๐ป Algorithm
๐ฉ ๊ทธ๋ ๋ค๋ฉด ์ ๋ด์ฉ์ ๊ธฐ๋ฐ์ผ๋ก ์์ฑํ ์ฝ๋๋ฅผ ์ดํด๋ณด์.
#21.11.01
import sys
from collections import deque
def dfs(v):
global visit_lst1
print(v, end=" ")
visit_lst1[v] = 1
for i in range(1, N+1):
# 1๋ถํฐ N๊น์ง์ ์ ์ ์ ํ์ธํ๋ฉด v์ ๊ฐ์ ์ด ์กด์ฌํ๋ฉฐ, ์์ง ํ์๋์ง ์์ ์ ์ ์ผ ๊ฒฝ์ฐ๋ฅผ ์ฐพ๋๋ค.
if visit_lst1[i] == 0 and graph[v][i] == 1:
# ํด๋น ์ ์ ์ ๊ธฐ์ค์ผ๋ก ๊น์ด ์ฐ์ ํ์์ ์งํํ๋ค.(์ฌ๊ท!)
dfs(i)
def bfs(v):
global visit_lst2
que = deque()
que.append(v)
visit_lst2[v] = 1
while que:
#deque์์ ๋ค์ ํ์ํ ์ ์ ์ ์๋ถ๋ถ์์ ๊บผ๋ด์จ๋ค.
temp = que.popleft()
print(temp, end=" ")
#ํ์์ด ์ด๋ฃจ์ด์ง์ง ์์ ์ ์ ์ ์ฐพ์ deque์ ๋ฃ๋๋ค.
for i in range(1, N+1):
if visit_lst2[i] == 0 and graph[temp][i] == 1:
que.append(i)
visit_lst2[i] = 1
N, M, V= map(int, sys.stdin.readline().split())
graph = [[0] * (N+1) for _ in range(N+1)]
visit_lst1 = [0 for i in range(N+1)]
visit_lst2 = [0 for i in range(N+1)]
for _ in range(M):
a, b = map(int, sys.stdin.readline().rstrip().split())
graph[a][b] = graph[b][a] = 1
dfs(V)
print()
bfs(V)
๐ฉ ํด๋น ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋๋ฐ ์๊ฐ๋ณด๋ค ์ ๋ง ์ค๋์๊ฐ์ด ๊ฑธ๋ ธ๋ค. ํ์ด ๋ฐฉ์์ ์ฝ๊ฒ ์ ์ ์์์ผ๋ ์๊พธ ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ค.
ํด๋น ๋ฌธ์ ๋ฅผ ํ์ดํ๋ฉด์ ๊น์ด ์ฐ์ ํ์ ์๊ณ ๋ฆฌ์ฆ์ ๊ฒฝ์ฐ, ์ฌ๊ท๋ฅผ ์ฃผ๋ก ์ฌ์ฉํ๋ค๋ ์ ์ ์๊ฒ ๋์๋ค. ๋ํ, ์ด๋ฌํ ํ์ ์๊ณ ๋ฆฌ์ฆ์์๋ ์๋ฃ๊ตฌ์กฐ deque๊ฐ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋๋ค๋ ์ ์ ์ด๋ฒ ๋ฌธ์ ๋ฅผ ํตํด์ ๋ค์ ํ ๋ฒ ํ์ธํ ์ ์์๋ค.
ํผ ๋ ์ง๋ ์ค๋๋์ง๋ง ์ ๋ฆฌ๋ ์ด์ ์ผ ํ๋ค..๐ถ ํ๋์ ์๊ณ ๋ฆฌ์ฆ ๊ณต๋ถ๋ฅผ ํ์ง ๋ชปํ๋ค๐ฅ๐ฅ ์ด์ ๋ค์ ์ ์ ์ฐจ๋ฆฌ๊ณ ํ๋ฃจํ๋ฃจ ๊พธ์คํ ํ์ด๋๊ฐ์ผ๊ฒ ๋ค!!!
์ด๋ฒ ๊ฒ์๊ธ๋!!!
์ฌ๊ธฐ์
์ด๋ง ~~ ~(หโพห~)
๐์ฐธ๊ณ
- https://steadily-worked.tistory.com/646
- https://devuna.tistory.com/32
๋๊ธ๋จ๊ธฐ๊ธฐ