11725๋ฒ: ํธ๋ฆฌ์ ๋ถ๋ชจ ์ฐพ๊ธฐ
๋ฃจํธ ์๋ ํธ๋ฆฌ๊ฐ ์ฃผ์ด์ง๋ค. ์ด๋, ํธ๋ฆฌ์ ๋ฃจํธ๋ฅผ 1์ด๋ผ๊ณ ์ ํ์ ๋, ๊ฐ ๋ ธ๋์ ๋ถ๋ชจ๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
www.acmicpc.net
์ค๋ช
๋ ธ๋ ๊ฐ์๋ฅผ 7๊ฐ๋ผ๊ณ ๊ฐ์ ํ์.
์์ ์ ๋ ฅ์ ๋์งธ ์ค๋ถํฐ ํธ๋ฆฌ ์์์ ์ฐ๊ฒฐ๋ ๋ ์ ์ ์ด ์ฃผ์ด์ง๋ค๊ณ ํ์ผ๋ ๊ทธ๋ฆผ์ผ๋ก ํํํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.

ํ๋์ ์ซ์๋ ์์ ์ ์ ๋ ฅ๋ ๋ ์ ์ ์ ์์๋๋ก ์ฐ๊ฒฐ๋ ๊ฒ์ ํํํ ๊ฒ์ด๋ค.
ํ์ด

์ด ๋ฌธ์ ๋ DFS์ BFS ๋ฌธ์ ๋ก ํ ์ ์๋๋ฐ ํ์๋ DFS๋ก ํ์๋ค.
for _ in range(N-1):
a, b = map(int, input().split())
#๋
ธ๋์ ์ฐ๊ฒฐ๋ ๊ฑธ ํํํ๊ธฐ ์ํด ์ธ์ ๋ฆฌ์คํธ์ ๊ฐ๊ฐ ์ ์ฅ
graph[a].append(b)
graph[b].append(a)
์ ์ฝ๋๋ฅผ ํํํ ๊ฒ์ด ์ฐ์ธก ์ฌ์ง์ด๋ค. ์ธ์ ๋ฆฌ์คํธ๋ฅผ ์์ฑํด์ฃผ๊ณ , ์ ๋ ฅ๋ฐ์ ๋ ์ ์ ์ ์๋ก ์ ์ฅํ๋ค.
๋ค์์ dfs๋ฅผ ๊ตฌํํ ๊ฒ์ด๋ค.
def dfs(x):
for i in graph[x]:
if visited[i] == 0: #๋ง์ฝ ํด๋น ๋
ธ๋์ ๋ฐฉ๋ฌธํ์ง ์์๋ค๋ฉด
visited[i] = x #ํด๋น ๋
ธ๋์ ์ ์ ์ ์ ์ฅ
dfs(i) #๊ทธ๋ฆฌ๊ณ ํด๋น ๋
ธ๋๋ฅผ ์ฌ๊ท
์ดํดํ๊ธฐ ์ด๋ ต๋ค๋ฉด ์๋์ ์ฝ๋๋ฅผ ๋ด๋ณด์. ์ค์ ๊ฐ์ ๋ฃ๊ณ ์ค๋ช ํ ๊ฒ์ด๋ค.
def dfs(1):
for i in graph[1]: #i = 6, 4 (6๋ถํฐ ํ์)
if visited[6] == 0: #๋ฐฉ๋ฌธํ์ง ์์์ผ๋ ํ์ฌ 0์ด๋ค.
visited[6] = 1 #6๋ฒ์ 1๋ฒ๊ณผ ์ฐ๊ฒฐ ๋ผ ์๋ค๊ณ ์ ์ฅ
dfs(6) #6์ผ๋ก dfs ํ์
↓
def dfs(6):
for i in graph[6]: # i = 1, 3
if visited[1] == 0: #๋ฐฉ๋ฌธํ์ง ์์์ผ๋ ํ์ฌ 0์ด๋ค.
visited[1] = 6 #1๋ฒ์ 6๋ฒ๊ณผ ์ฐ๊ฒฐ ๋ผ ์๋ค๊ณ ์ ์ฅ
dfs(1) #1๋ก dfs ํ์
↓
def dfs(1):
for i in graph[1]: # i = 6, 4
if visited[4] == 0: #6์ ์์์ 1๋ก ์ ์ฅ๋ผ ์์ด์ ๋ฐฉ๋ฌธํ์ง ์์ 4๋ฒ ํ์ธ
visited[4] = 1 #4๋ฒ์ 1๋ฒ๊ณผ ์ฐ๊ฒฐ ๋ผ ์๋ค๊ณ ์ ์ฅ
dfs(4) #4๋ก dfs ํ์
.
.
.
์ธ์ ๋ฆฌ์คํธ๋ฅผ ๊ณ์ ๋ฐฉ๋ฌธํด ๊ฐ๋ฉด์ ๋ถ๋ชจ ๋ ธ๋๋ฅผ ์ ์ฅํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ๋ฐฉ๋ฌธํ์ง ์์ ๊ฒ์ ์กฐ๊ฑด๋ฌธ์์ ๋ถ๋ชจ ๋ ธ๋๋ฅผ ์ ์ฅํ๋ฉด์ ๋ฐฉ๋ฌธ ํ์๋ฅผ ํ๋ค. ๋ค์์ ์ฝ๋ ์ ์ฒด์ด๋ค.
โป ์ฃผ์ํ ์
์ด ๋ฌธ์ ์์ ์ฃผ์ํ ๊ฒ์ ๋ฐ๋ณต์ ํ์ด๋ค. ๋ฐ๋ณต์ด ๊ธฐ๋ณธ์ ์ผ๋ก 1000ํ๋ก ๋์ด ์์ด์ sys.setrecursionlimit(10**9) ์ฝ๋๋ฅผ ์ถ๊ฐํด์ ๋ฐ๋ณต์ ํ์ ๋๋ ค์ค์ผ ํ๋ค.
Solution
import sys
input = sys.stdin.readline #์
๋ ฅ์ ๋น ๋ฅด๊ฒ ํ๊ธฐ ์ํจ
sys.setrecursionlimit(10**9) #๋ฐํ์ ์๋ฌ ๋์ ์ถ๊ฐ
N = int(input()) #๋
ธ๋ ๊ฐ์
graph = [[] for _ in range(N+1)] #์ธ์ ๋ฆฌ์คํธ ์์ฑ
visited = [0]*(N+1) #๋ฐฉ๋ฌธํ์ธ
#DFS ๊ตฌํ
def dfs(x):
for i in graph[x]:
if visited[i] == 0: #๋ง์ฝ ํด๋น ๋
ธ๋์ ๋ฐฉ๋ฌธํ์ง ์์๋ค๋ฉด
visited[i] = x #ํด๋น ๋
ธ๋์ ์ ์ ์ ์ ์ฅ
dfs(i) #๊ทธ๋ฆฌ๊ณ ์ฌ๊ท
for _ in range(N-1):
a, b = map(int, input().split())
#๋
ธ๋์ ์ฐ๊ฒฐ๋ ๊ฑธ ํํํ๊ธฐ ์ํด ์ธ์ ๋ฆฌ์คํธ์ ๊ฐ๊ฐ ์ ์ฅ
graph[a].append(b)
graph[b].append(a)
dfs(1)
#2๋ฒ ๋ฆฌ์คํธ๋ถํฐ ๋ต ์ถ๋ ฅ
for i in range(2, N+1):
print(visited[i])'๐งฉ Algorithm > [BOJ] Silver' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| BOJ 2178๋ฒ : ๋ฏธ๋ก ํ์ (Python/Silver 1) (1) | 2023.05.13 |
|---|---|
| BOJ 15651๋ฒ : N๊ณผ M (3) (Python/Silver 3) (0) | 2023.05.11 |
| BOJ 9012๋ฒ : ๊ดํธ (Python/Silver 4) (0) | 2023.05.03 |
| BOJ 10773๋ฒ : ์ ๋ก (Python/Silver 4) (0) | 2023.05.02 |
| BOJ 10866๋ฒ : ๋ฑ (Python/Silver 4) (0) | 2023.04.20 |