๐ ์๋ก
DFS๋ฅผ ์ ๋๋ก ๋ค๋ค๋ณด์ง ๋ชปํ์ฌ ์ค๋๋ถํฐ DFS, BFS ๋ฌธ์ ํ๋์ฉ์ ํ ์์ ์ด๋ค!
๊ทธ๋์ ๋์ ํด๋ณธ ๋ฌธ์ ๋ "๋ฐ์ด๋ฌ์ค" ์ ์ ์คํฐ๋๋ ๋์ ํ์๋ค๊ฐ ์คํจํ ๋ฌธ์ ์ด๋ค. ๊ทธ๋๋ DFS์ BFS์ ๊ฐ๋ ์ ์ ๋ชฐ๋๊ธฐ์ ์คํจํ์์ผ๋, ์ด์ ๋ ๋ค๋ฅด๋ค!ใ ใ
๐ ํ์ด
์ฃผ์ด์ง ์ปดํจํฐ์ ์๋ก ๋ฆฌ์คํธ ์ปดํ๋ฆฌํจ์ ์ผ๋ก ๊ทธ๋ํ๋ฅผ ๋ง๋ค๊ณ ๊ทธ ํ์ ์ฃผ์ด์ง๋ ์ธํ ๊ฐ์ ๊ฐ์ ์์น์ ๋ฃ์ด์ค ๋ค DFS๋ฅผ ๋๋ ธ๋ค.
๐ป ์ฝ๋
import sys
input = sys.stdin.readline
# dfs ์ ์
def dfs(graph, v, visited):
visited[v] = True
for i in graph[v]:
if not visited[i]:
dfs(graph, i, visited)
com = int(input().rstrip()) # ์ปดํจํฐ์ ๊ฐฏ์
visited = [False] * (com+1) # ๋ฐฉ๋ฌธ์ ์ฒดํฌํ๊ธฐ ์ํ ๋ถ๋ฆฌ์ ๋ฆฌ์คํธ
connect = [] # 1 : 1 ์ฐ๊ฒฐ๋ก ์ฃผ์ด์ง ์ธํ์ ๋ด์ ๋ฆฌ์คํธ
graph = [[] for i in range(com+1)] # ์ต์ข
์ ์ธ ๊ทธ๋ํ
for i in range(int(input().rstrip())):
connect.append(list(map(int, input().rstrip().split()))) # ์ฐ๊ฒฐ๋ ์ปดํจํฐ ๋ด์
for j in connect: # ์ฐ๊ฒฐ๋๊ฑธ ํ๋ํ๋ ๋ฏ์ด๋ด
for k in range(1, com+1):
# ์ด๋ค ์ปดํจํฐ๊ฐ ์ฐ๊ฒฐ๋์๋์ง ์ฒดํฌ
if k in j:
graph[k].append(*set(j)-{k}) # ๊ทธ๋ํ์ ๊ฐ ์ง์ด๋ฃ์
# ์์ ์
๋ ฅ ๋ฃ์ผ๋ฉด, ์๋์ ๊ฐ์ด ๊ทธ๋ํ ์์ฑ
# graph = [
# [],
# [2,5],
# [1,3],
# [2],
# [7],
# [1,2,6],
# [5],
# [7]
# ]
dfs(graph, 1, visited)
# ๋ฐฉ๋ฌธํ ์ ์ด ์๋ค๋ฉด, ๊ฐ์ผ๋๋ค๋ ๊ฒ! ์ฆ True ๊ฐ์ ์นด์ดํธํด์ ์ถ๋ ฅํ๋ค. -1 ํ ์ด์ ๋ 1๋ฒ ์ปดํจํฐ๋ฅผ ํตํด
# ๊ฐ์ผ๋๋ ์ปดํจํฐ์ ์๋ฅผ ์ถ๋ ฅํ๋ ๊ฒ์ด๋ 1๋ฒ ์ปดํจํฐ๋ ์ ์ํ๋ค.
print(visited.count(True)-1)
๐ ๋ฌธ์ ๋งํฌ : ๋ฐ์ด๋ฌ์ค
'Problem Solving > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 1654๋ฒ: ๋์ ์๋ฅด๊ธฐ - ํ์ด์ฌ (0) | 2022.05.23 |
---|---|
[๋ฐฑ์ค] 25192๋ฒ: ์ธ์ฌ์ฑ ๋ฐ์ ๊ณฐ๊ณฐ์ด - ํ์ด์ฌ (0) | 2022.05.22 |
[๋ฐฑ์ค] 1918๋ฒ: ํ์ํ๊ธฐ์ - ํ์ด์ฌ (0) | 2022.05.16 |
[๋ฐฑ์ค] 1629๋ฒ: ๊ณฑ์ - ํ์ด์ฌ (1) | 2022.05.16 |
[๋ฐฑ์ค] 14425๋ฒ: ๋ฌธ์์ด ์งํฉ - ํ์ด์ฌ (0) | 2022.05.15 |