백준 11725. 트리의 부모 찾기 (파이썬 / 자바)
파이썬
양방향 모두 저장한 후 접근
아직 탐색하지 않은 값이 있다면 그 인덱스의 자식에 해당
import sys
sys.setrecursionlimit(10**6) # 안하면 recursionError
input = sys.stdin.readline
def search(v):
visited[v] = True
for n in tree[v]:
if visited[n] == False: # 아직 탐색하지 않은 값이 있다면 자식에 해당
ans[n] = v
search(n)
return
N = int(input())
tree = [[] for _ in range(N + 1)]
visited = [0] * (N + 1)
ans = [0] * (N + 1)
for _ in range(N - 1):
a, b = map(int, input().split())
tree[a].append(b)
tree[b].append(a)
search(1) # 문제 조건: 노드는 1
for i in range(2, N + 1):
print(ans[i])
자바
파이썬 코드와는 반대로, 이미 방문한 값이 있다면 현재 인덱스의 부모에 해당
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
static int N;
static ArrayList<Integer>[] tree;
static boolean[] visited;
static int[] parents;
static void search(int i) {
visited[i] = true;
for (int t : tree[i]) {
if (visited[t]) {
parents[i] = t;
}
else {
search(t);
}
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
tree = new ArrayList[N + 1];
visited = new boolean[N + 1];
for (int i = 0; i < N + 1; i++) {
tree[i] = new ArrayList<>();
}
for (int n = 0; n < N - 1; n++) {
int a = sc.nextInt();
int b= sc.nextInt();
tree[a].add(b);
tree[b].add(a);
}
// 부모 찾기
parents = new int[N + 1];
search(1);
for (int i = 2; i < N + 1; i++) {
System.out.println(parents[i]);
}
}
}
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ] 13023. ABCDE (python / java) (0) | 2023.04.09 |
---|---|
[BOJ] 11724. 연결 요소의 개수 (python / java) (0) | 2023.03.21 |
[BOJ] 11478. 서로 다른 부분 문자열의 개수 (python) (0) | 2023.03.20 |
[BOJ] 9742. 순열 (python / java) (0) | 2023.03.19 |
[BOJ] 1759. 암호 만들기 (Python / Java) (0) | 2023.03.17 |