๐ฆ ๋ฐ์ด๋ฌ์ค
๋ฐฑ์ค Class3 Silver3
solved_ac[Class3] ๋ฐ์ด๋ฌ์ค
๋ฌธ์
์ ์ข ๋ฐ์ด๋ฌ์ค์ธ ์ ๋ฐ์ด๋ฌ์ค๋ ๋คํธ์ํฌ๋ฅผ ํตํด ์ ํ๋๋ค. ํ ์ปดํจํฐ๊ฐ ์ ๋ฐ์ด๋ฌ์ค์ ๊ฑธ๋ฆฌ๋ฉด ๊ทธ ์ปดํจํฐ์ ๋คํธ์ํฌ ์์์ ์ฐ๊ฒฐ๋์ด ์๋ ๋ชจ๋ ์ปดํจํฐ๋ ์ ๋ฐ์ด๋ฌ์ค์ ๊ฑธ๋ฆฌ๊ฒ ๋๋ค.
์๋ฅผ ๋ค์ด 7๋์ ์ปดํจํฐ๊ฐ <๊ทธ๋ฆผ 1>๊ณผ ๊ฐ์ด ๋คํธ์ํฌ ์์์ ์ฐ๊ฒฐ๋์ด ์๋ค๊ณ ํ์. 1๋ฒ ์ปดํจํฐ๊ฐ ์ ๋ฐ์ด๋ฌ์ค์ ๊ฑธ๋ฆฌ๋ฉด ์ ๋ฐ์ด๋ฌ์ค๋ 2๋ฒ๊ณผ 5๋ฒ ์ปดํจํฐ๋ฅผ ๊ฑฐ์ณ 3๋ฒ๊ณผ 6๋ฒ ์ปดํจํฐ๊น์ง ์ ํ๋์ด 2, 3, 5, 6 ๋ค ๋์ ์ปดํจํฐ๋ ์ ๋ฐ์ด๋ฌ์ค์ ๊ฑธ๋ฆฌ๊ฒ ๋๋ค. ํ์ง๋ง 4๋ฒ๊ณผ 7๋ฒ ์ปดํจํฐ๋ 1๋ฒ ์ปดํจํฐ์ ๋คํธ์ํฌ์์์ ์ฐ๊ฒฐ๋์ด ์์ง ์๊ธฐ ๋๋ฌธ์ ์ํฅ์ ๋ฐ์ง ์๋๋ค.
์ด๋ ๋ 1๋ฒ ์ปดํจํฐ๊ฐ ์ ๋ฐ์ด๋ฌ์ค์ ๊ฑธ๋ ธ๋ค. ์ปดํจํฐ์ ์์ ๋คํธ์ํฌ ์์์ ์๋ก ์ฐ๊ฒฐ๋์ด ์๋ ์ ๋ณด๊ฐ ์ฃผ์ด์ง ๋, 1๋ฒ ์ปดํจํฐ๋ฅผ ํตํด ์ ๋ฐ์ด๋ฌ์ค์ ๊ฑธ๋ฆฌ๊ฒ ๋๋ ์ปดํจํฐ์ ์๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์๋ ์ปดํจํฐ์ ์๊ฐ ์ฃผ์ด์ง๋ค. ์ปดํจํฐ์ ์๋ 100 ์ดํ์ด๊ณ ๊ฐ ์ปดํจํฐ์๋ 1๋ฒ ๋ถํฐ ์ฐจ๋ก๋๋ก ๋ฒํธ๊ฐ ๋งค๊ฒจ์ง๋ค. ๋์งธ ์ค์๋ ๋คํธ์ํฌ ์์์ ์ง์ ์ฐ๊ฒฐ๋์ด ์๋ ์ปดํจํฐ ์์ ์๊ฐ ์ฃผ์ด์ง๋ค. ์ด์ด์ ๊ทธ ์๋งํผ ํ ์ค์ ํ ์์ฉ ๋คํธ์ํฌ ์์์ ์ง์ ์ฐ๊ฒฐ๋์ด ์๋ ์ปดํจํฐ์ ๋ฒํธ ์์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
1๋ฒ ์ปดํจํฐ๊ฐ ์ ๋ฐ์ด๋ฌ์ค์ ๊ฑธ๋ ธ์ ๋, 1๋ฒ ์ปดํจํฐ๋ฅผ ํตํด ์ ๋ฐ์ด๋ฌ์ค์ ๊ฑธ๋ฆฌ๊ฒ ๋๋ ์ปดํจํฐ์ ์๋ฅผ ์ฒซ์งธ ์ค์ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ 1
7
6
1 2
2 3
1 5
5 2
5 6
4 7
์์ ์ถ๋ ฅ 1
4
๐ ์๋ฃ๊ตฌ์กฐ
์ด ๋ฌธ์ ๋ DFS, BFS ์ด๋ค ๊ฒ์ ์ ํํ์ฌ ํ๋ ๋ฌด๋ฐฉํ๋ค. ์๋ํ๋ฉด ๊ทธ๋ํ ์ ์ฒด๋ฅผ ์ํํ๋ฉฐ ํ์ํด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋๋ BFS๊ฐ ์กฐ๊ธ ๋ ์ต์ํ์ฌ BFS๋ก ํ์๋ค.
BFS ๊ธฐ๋ณธ ๊ณจ๊ฒฉ์ count ๋ณ์(๋ฐ์ด๋ฌ์ค์ ๊ฑธ๋ฆฐ ์ปดํจํฐ ๊ฐ์)๋ง ์ถ๊ฐํ์๋ค.
๐จ๐ปโ๐ป CODE
from collections import deque
node = int(input())
edge = int(input())
# ์ปดํจํฐ ์ฐ๊ฒฐ๋ง ์ด๊ธฐํ
graph = [[0]*(node+1) for _ in range(node+1)]
visited = [0]*(node+1)
# ์ปดํจํฐ ์ฐ๊ฒฐ๋ง ์ํ ํ์
for _ in range(edge):
start,end = map(int,input().split())
graph[start][end] = 1
graph[end][start] = 1
# ๊ทธ๋ํ ํ์
def bfs(start):
q =deque([start])
visited[start] = 1
count = 0
while q:
cur = q.popleft()
for i in range(node+1):
if graph[cur][i] == 1 and visited[i] == 0:
q.append(i)
visited[i] = 1
count += 1
return count
print(bfs(1))