-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
documentationImprovements or additions to documentationImprovements or additions to documentation
Description
๋ฌธ์ ๋ถ์
์ฒซ ๋ฒ์งธ ๋จ๊ณ(๋ฌธ์ ์์ฝ ๋ฐ ์กฐ๊ฑด ํ์ )
๋ฃจํธ ์๋ ํธ๋ฆฌ๊ฐ ์ฃผ์ด์ง.
ํธ๋ฆฌ์ ๋ฃจํธ๋ฅผ 1์ด๋ผ๊ณ ๊ฐ์ ํ ๋, ๊ฐ ๋ ธ๋์ ๋ถ๋ชจ๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ ์์ฑ
๋ ๋ฒ์งธ ๋จ๊ณ (๋ฌธ์ ํต์ฌ ํ์ )
๋ฌด๋ฐฉํฅ ๋น์ํ ๊ทธ๋ํ์์ ๊นจ๋ฌ์๋ค.
์ด๋ ํธ๋ฆฌ ์ด๋ฉฐ, ํธ๋ฆฌ ์ํ ์๊ณ ๋ฆฌ์ฆ(DFS, BFS)์ ๋ ์ฌ๋ ธ๋ค.
- ์ ๋ ฅ
์ฒซ์งธ ์ค์ ๋ ธ๋์ ๊ฐ์ N (2 โค N โค 100,000)์ด ์ฃผ์ด์ง.
๋์งธ ์ค๋ถํฐ N-1๊ฐ์ ์ค์ ํธ๋ฆฌ ์์์ ์ฐ๊ฒฐ๋ ๋ ์ ์ ์ด ์ฃผ์ด์ง๋ค.
- ์ถ๋ ฅ
์ฒซ์งธ ์ค๋ถํฐ N-1๊ฐ์ ์ค์ ๊ฐ ๋ ธ๋์ ๋ถ๋ชจ ๋ ธ๋ ๋ฒํธ๋ฅผ 2๋ฒ ๋ ธ๋๋ถํฐ ์์๋๋กย ์ถ๋ ฅํ๋ค.
์ด๋ ๋
ธ๋์ ๊ฐ์๊ฐ ์ญ๋ง๊น์ง ๊ฐ๋ฅํ๋ฏ๋ก, ์ฌ๊ท๋ฅผ ์ด์ฉํ DFS ํ์ด๋ ์ด์ง ๋ถ๋ฆฌํ๋ค๊ณ ์๊ฐ.
๋ฐ๋ผ์ BFS๋ก ํ์ดํ๊ฒ ์.
- BFS๋ย ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉํ๋ฉฐ, ๊ตฌ์ฒด์ ์ธ ๋์ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ๋ค
- ํ์ ์์ ๋ ธ๋๋ฅผ ํ์ ์ฝ์ ํ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํฉ๋๋ค
- ํ์์ ๋ ธ๋๋ฅผ ๊บผ๋ธ ๋ค์ ํด๋น ๋ ธ๋์ ์ธ์ ๋ ธ๋ ์ค์์ ๋ฐฉ๋ฌธํ์ง ์์ ๋ ธ๋๋ฅผ ๋ชจ๋ ํ์ ์ฝ์ ํ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌํ๋ค
- ๋ ์ด์ 2๋ฒ์ ๊ณผ์ ์ ์ํํ ์ ์์ ๋๊น์ง ๋ฐ๋ณตํ๋ค
์ฝ๋ ์์ฑ
from collections import deque
n = int(input())
visited = [False for _ in range(n + 1)] # ๊ฐ ๋
ธ๋๊ฐ ๋ฐฉ๋ฌธ๋ ์ ๋ณด๋ฅผ ๋ฆฌ์คํธ ์๋ฃํ์ผ๋ก ํํ(1์ฐจ์ ๋ฆฌ์คํธ)
answer = [0 for _ in range(n + 1)] # ์ ๋ต ๋ด์ ๋ฆฌ์คํธ
graph = [[0] for _ in range(n + 1)] # ํธ๋ฆฌ
for _ in range(n - 1): # 1์ ์ ์ธ
x, y = map(int, input().split())
graph[x].append(y)
graph[y].append(x) # ๋ฌด๋ฐฉํฅ์ ์๋ฐฉํฅ์.
def bfs(graph, start, visited):
# ํ(Queue) ๊ตฌํ์ ์ํด deque ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ
que = deque([start])
# ํ์ฌ ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
visited[start] = True
# ํ๊ฐ ๋น๋๊น์ง ๋ฐ๋ณต
while que:
v = que.popleft()
# ํด๋น ์์์ ์ฐ๊ฒฐ๋, ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ์์๋ค์ ํ์ ์ฝ์
for i in graph[v]:
if not visited[i]:
answer[i] = v
que.append(i)
visited[i] = True
bfs(graph, 1, visited)
for i in range(2, n + 1): # 2๋ฒ ๋
ธ๋๋ถํฐ ์ํ
print(answer[i])๋๋์
์ด์ฝํ 3ํ๋ ๋ค์ ๊ฐ์ผํ๋..
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
documentationImprovements or additions to documentationImprovements or additions to documentation