๋ฌธ์
https://www.acmicpc.net/problem/2606
๋ด ๋ฌธ์ ํ์ด
n = int(input())
c = int(input())
network = [[] for _ in range(n)]
queue = []
visited = [False] * n
count = 0
for _ in range(c):
a, b = map(int, input().split())
network[a-1].append(b-1)
network[b-1].append(a-1)
def dfs(x):
if visited[x]: return
visited[x] = True
for i in range(len(network[x])):
dfs(network[x][i])
dfs(0)
for i in visited:
if i: count += 1
print(count-1)
๐ DFS ๋ฌธ์ ๋ก, 2์ฐจ์ ๋ฆฌ์คํธ๋ฅผ ์์ฑํ์ฌ ์ปดํจํฐ๋ง๋ค ์ฐ๊ฒฐ๋ ์ปดํจํฐ๋ค์ ํ์ํด์ ํ์ํด์ฃผ๋ ๊ฒ์ด ํฌ์ธํธ
- network๋ผ๋ ๋น์ด์๋ 2์ฐจ์ ๋ฆฌ์คํธ๋ฅผ ์ปดํจํฐ์ ๊ฐ์ ํฌ๊ธฐ๋ก ๋ง๋ค์ด์ฃผ์๊ณ ,
์ฃผ์ด์ง ๋คํธ์ํฌ ์์ ์ ๋ ฅ๋ฐ์ผ๋ฉด์ network ๋ฆฌ์คํธ์ ์ฐ๊ฒฐ ํ์๋ฅผ ํด์ฃผ์๋ค.
EX) 2, 5 ์ ๋ ฅ -> network[1]์ 4 append, network[4]์ 1 append - dfs ํจ์์์ ์ฒ์์ 0์ ์ธ์๋ก ๋ฐ๊ณ , network[0] ์๋ฆฌ์ ์ ์ฅ๋ ๋ฒํธ์ ์ปดํจํฐ๋ค์ ๊ฐ์ผ๋ ๊ฒ์ด๋ฏ๋ก
for๋ฌธ์ ์ฌ์ฉํ์ฌ network[0]์ ์ ์ฅ๋ ์ปดํจํฐ๋ค์ ๋ํ dfs๋ฅผ ์งํํ๋ค.
์ด๋ฏธ ๊ฐ์ผ๋ ๊ฒ์ ํ์ธํ ์ปดํจํฐ๋ visited ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋ณต์ ํผํ๋ค. - dfs ํจ์๊ฐ ์ข ๋ฃ๋ ์ดํ์๋ visited ํจ์์ True๊ฐ ์ ์ฅ๋ ์ธ๋ฑ์ค์ ๊ฐ์๋ฅผ ๊ฒฐ๊ณผ๋ก ์ถ๋ ฅํ๋ค.
๐ก ํผ๋๋ฐฑ
- ์ผ๋ฐ์ ์ธ DFS, BFS ๋ฌธ์ ์๋ ์กฐ๊ธ ๋ค๋ฅธ ์คํ์ผ์ด์๋ ๊ฒ ๊ฐ๊ณ ,
๊ทธ๋์์ธ์ง ์ฝ์ง๋ง 1์๊ฐ ์ ๋ ์๊ฐ์ด ๊ฑธ๋ ธ๋ค.
'4๏ธโฃ Python > Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python Algorithm] ์ฐ๊ตฌ์ BOJ #14502 (0) | 2022.01.30 |
---|---|
[Python Algorithm] ์ฐ๊ฒฐ ์์์ ๊ฐ์ BOJ #11724 (0) | 2022.01.29 |
[Python Algorithm] ์ ๊ธฐ๋ ๋ฐฐ์ถ BOJ #1012 (0) | 2022.01.27 |
[Python Algorithm] ์ ์ ์ผ๊ฐํ BOJ #1932 (0) | 2021.12.17 |
[Python Algorithm] RGB๊ฑฐ๋ฆฌ BOJ #1149 (0) | 2021.12.16 |
๋๊ธ