1) ๋ฌธ์
- ๊ทธ๋ํ๋ฅผ DFS๋ก ํ์ํ ๊ฒฐ๊ณผ์ BFS๋ก ํ์ํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
- ๋จ, ๋ฐฉ๋ฌธํ ์ ์๋ ์ ์ ์ด ์ฌ๋ฌ ๊ฐ์ธ ๊ฒฝ์ฐ์๋ ์ ์ ๋ฒํธ๊ฐ ์์ ๊ฒ์ ๋จผ์ ๋ฐฉ๋ฌธํ๊ณ , ๋ ์ด์ ๋ฐฉ๋ฌธํ ์ ์๋ ์ ์ด ์๋ ๊ฒฝ์ฐ ์ข ๋ฃํ๋ค.
- ์ ์ ๋ฒํธ๋ 1๋ฒ๋ถํฐ N๋ฒ๊น์ง์ด๋ค.
2) ์ ๋ ฅ
- ์ฒซ์งธ ์ค์ ์ ์ ์ ๊ฐ์ N(1 ≤ N ≤ 1,000), ๊ฐ์ ์ ๊ฐ์ M(1 ≤ M ≤ 10,000), ํ์์ ์์ํ ์ ์ ์ ๋ฒํธ V๊ฐ ์ฃผ์ด์ง๋ค.
- ๋ค์ M๊ฐ์ ์ค์๋ ๊ฐ์ ์ด ์ฐ๊ฒฐํ๋ ๋ ์ ์ ์ ๋ฒํธ๊ฐ ์ฃผ์ด์ง๋ค.
- ์ด๋ค ๋ ์ ์ ์ฌ์ด์ ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ ์ด ์์ ์ ์๋ค. ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ ๊ฐ์ ์ ์๋ฐฉํฅ์ด๋ค.
3) ์ถ๋ ฅ
- ์ฒซ์งธ ์ค์ DFS๋ฅผ ์ํํ ๊ฒฐ๊ณผ๋ฅผ, ๊ทธ ๋ค์ ์ค์๋ BFS๋ฅผ ์ํํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค. V๋ถํฐ ๋ฐฉ๋ฌธ๋ ์ ์ ์์๋๋ก ์ถ๋ ฅํ๋ฉด ๋๋ค.
4) ์ ๋ ฅ, ์ถ๋ ฅ ์์
[์
๋ ฅ]
4 5 1
1 2
1 3
1 4
2 4
3 4
[์ถ๋ ฅ]
1 2 4 3
1 2 3 4
5) ํ์ด
from collections import deque
# dfs ์ฝ๋
def dfs(start_v):
dfs_visited.append(start_v)
for v in grid[start_v]:
if v not in dfs_visited:
dfs(v)
# bfs ์ฝ๋
def bfs(start_v):
bfs_visited.append(start_v)
q = deque()
q.append(start_v)
while q:
cur_v = q.popleft()
for v in grid[cur_v]:
if v not in bfs_visited:
q.append(v)
bfs_visited.append(v)
# vertex, edge, start ๋ฐ์ดํฐ ์
๋ ฅ
vertex, edge, start = map(int, input().split())
# ๊ทธ๋ํ ์ ์ธ
grid = {n: [] for n in range(1, vertex + 1)}
# ๊ทธ๋ํ ์ด๊ธฐํ
for _ in range(edge):
v1, v2 = map(int, input().split())
grid[v1].append(v2)
grid[v2].append(v1)
# ๊ทธ๋ํ ๋ด ๋ฆฌ์คํธ ์ ๋ ฌ
for key in grid.keys():
grid[key].sort()
# dfs, bfs ๋ฐฉ๋ฌธ ๋ฆฌ์คํธ
dfs_visited = []
bfs_visited = []
# dfs ์์ ๋ฐ ์ถ๋ ฅ
dfs(start)
print(*dfs_visited)
# bfs ์์ ๋ฐ ์ถ๋ ฅ
bfs(start)
print(*bfs_visited)
[Reference]
๋ฐ์ํ
'๐ฏ Coding Test > ์๊ณ ๋ฆฌ์ฆ ํ ์คํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค (Lv 2) - ๊ธฐ๋ฅ๊ฐ๋ฐ (1) | 2023.08.17 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค (Lv 2) - ํ๋ก์ธ์ค (1) | 2023.08.16 |
ํ๋ก๊ทธ๋๋จธ์ค (Lv 0) - ์น์์ด (1) (1) | 2023.08.16 |
ํ๋ก๊ทธ๋๋จธ์ค (Lv 0) - ์ ์๋ฅผ ๋์ ํ์ผ๋ก ๋ฐฐ์นํ๊ธฐ (2) | 2023.08.16 |
๋ฐฑ์ค 2178๋ฒ - ๋ฏธ๋ก ํ์ (1) | 2023.08.14 |