11725번: 트리의 부모 찾기
문제 )
루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.
입력 :
첫째 줄에 노드의 개수 N (2 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N-1개의 줄에 트리 상에서 연결된 두 정점이 주어진다.
출력 :
첫째 줄부터 N-1개의 줄에 각 노드의 부모 노드 번호를 2번 노드부터 순서대로 출력한다.
풀이)
간단하게 생각하면 쉬운 문제였는데 너무 어렵게 생각한게
시간을 너무 많이 잡아 먹은 것 같다.
어떻게 해야 간단히 생각한 걸까?
DFS의 경우에는 깊이 우선 탐색이므로 부모 노드에서부터 자식노드로 점점 내려가는 형식을 취하고 있다.
따라서 문제에서 트리의 루트를 1이라 가정했으므로, 1번 노드에서부터 시작하여 각 노드 도착했을때,
출발한 노드가 부모노드가 되므로, 도착유무를 저장하는 visited 변수에 도착 유무가 아닌
출발 노드를 저장하면, 보다 단순하게 부모노드를 찾아낼 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
from collections import deque
import sys
def DFS(i):
global visited
stack.append(i)
while stack:
a = stack.pop()
for i in graph[a]:
if not visited[i]:
# 부모 노드를 거쳐서 자식 노드로 가므로,
# a가 i 노드의 부모가 된다.
visited[i] = a
stack.append(i)
n = int(sys.stdin.readline().strip())
graph = [[] for i in range(n + 1)]
# 트리를 양 방향으로 입력 받기
for i in range(n - 1):
a, b = map(int, sys.stdin.readline().strip().split())
graph[a].append(b)
graph[b].append(a)
# DFS 사용
stack = deque()
visited = [False] * (n + 1)
DFS(1) # 시작 노드 "1"
for i in range(2, n + 1):
print(visited[i])
|
cs |
+ 22 - 04 - 03 트리의 부모찾기 2번째 풀이 // dfs이용
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
import sys
sys.setrecursionlimit(1 << 30)
def dfs(cur, prv):
# cur번 트리의 부모 저장
par[cur] = prv
for i in tree[cur]:
if i == prv:
continue
dfs(i, cur)
n = int(sys.stdin.readline().strip())
tree = [[] for i in range(n + 1)]
par = [0] * (n + 1)
for i in range(n - 1):
a, b = map(int, sys.stdin.readline().strip().split())
tree[a].append(b)
tree[b].append(a)
dfs(1, 1)
for i in range(2, n + 1):
print(par[i])
|
cs |
출처 : https://www.acmicpc.net/problem/11725
11725번: 트리의 부모 찾기
루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.
www.acmicpc.net
'Develop > 백준 (python)' 카테고리의 다른 글
[백준] 15654번: N과 M (5) (python) (0) | 2022.03.08 |
---|---|
[백준] 3184번: 양 (python) (0) | 2022.03.08 |
[백준] 7562번: 나이트의 이동 (python) (0) | 2022.03.06 |
[백준] 4963번: 섬의 개수 (python) (0) | 2022.03.06 |
[백준] 1012번: 유기농 배추 (python) (0) | 2022.03.06 |