728x90
루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 문제
더보기
문제
루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 노드의 개수 N $(2 ≤ N ≤ 100,000)$이 주어진다. 둘째 줄부터 N-1개의 줄에 트리 상에서 연결된 두 정점이 주어진다.
출력
첫째 줄부터 N-1개의 줄에 각 노드의 부모 노드 번호를 2번 노드부터 순서대로 출력한다.
bfs나 dfs 알고리즘을 사용해서
1의 자식을 탐색하면서 그 자식의 부모를 1로 기록하고,
연결된 노드를 탐색하면서 그 부모를 기록하는 과정을 반복했으며,
부모가 기록된 노드에 대해서는 이미 방문한 경우로 판단해서 처리했습니다.
bfs 알고리즘
import sys
from collections import deque
input = sys.stdin.readline
def main():
N = int(input())
graph = [[] for _ in range(N+1)]
ans = [[] for _ in range(N+1)]
for _ in range(N-1):
i, j = map(int, input().split())
graph[i].append(j)
graph[j].append(i)
q = deque([1])
while q:
i = q.popleft()
for n in graph[i]:
if not ans[n]:
ans[n] = i
q.append(n)
print("\n".join(map(str, ans[2:])))
if __name__ == "__main__":
main()
dfs 알고리즘
import sys
sys.setrecursionlimit(10**6)
input = sys.stdin.readline
def main():
N = int(input())
graph = [[] for _ in range(N+1)]
ans = [[] for _ in range(N+1)]
for _ in range(N-1):
i, j = map(int, input().split())
graph[i].append(j)
graph[j].append(i)
def dfs(i):
for n in graph[i]:
if not ans[n]:
ans[n] = i
dfs(n)
dfs(1)
print("\n".join(map(str, ans[2:])))
if __name__ == "__main__":
main()
defualtdict를 사용해본 코드
더보기
import sys
from collections import defaultdict
sys.setrecursionlimit(10**6)
input = sys.stdin.readline
def main():
N = int(input())
graph = defaultdict(list)
ans = defaultdict(list)
for _ in range(N-1):
i, j = input().rstrip().split()
graph[i].append(j)
graph[j].append(i)
def dfs(i):
for n in graph[i]:
if n not in ans:
ans[n] = i
dfs(n)
dfs("1")
print("\n".join(ans[i] for i in map(str, range(2, N+1))))
if __name__ == "__main__":
main()
더보기
예제 입력 1
7
1 6
6 3
3 5
4 1
2 4
4 7
예제 출력 1
4
6
1
3
1
4
예제 입력 2
12
1 2
1 3
2 4
3 5
3 6
4 7
4 8
5 9
5 10
6 11
6 12
예제 출력 2
1
1
2
3
3
4
4
5
5
6
6
'IT > Python' 카테고리의 다른 글
[백준] 1629번 곱셈 [Python] (1) | 2023.10.23 |
---|---|
[백준] 1149번 RGB거리 [Python] - 다이나믹 (2) | 2023.10.21 |
[백준] 7662번 이중 우선순위 큐[Python] - 자료구조 (0) | 2023.10.20 |
[백준] 11053번 가장 긴 증가하는 부분 수열 [Python] - 다이나믹, LIS (0) | 2023.10.19 |