728x90
dfs를 이용하여 루트 노드부터 차례대로 아래로 내려가면서 문제를 해결한다.
- 1번이 루트노드로 정해졌으므로 1번부터 밑으로 내려가면 된다
- 리스트를 만들어 서로 연결된 노드들을 넣어준다.
- dfs 메소드에서 for문을 이용해 차례대로 노드들을 뽑아준다.
- 뽑은 노드들을 다시 dfs로 후출하면 된다.
* 위에서부터 차례대로 노드를 찾아가므로 부모배열을 만들고 dfs의 매개변수랑 연결된 값의 부모는 매개변수가 된다.
코드
package baekjoon;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class find_treeparent {
static int n;
static List<Integer>[] list;
static boolean[] visit;
static int[] parents;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
list = new ArrayList[n+1];
parents = new int[n+1];
visit = new boolean[n+1];
for(int i = 1;i<=n;i++){
list[i] = new ArrayList<>();
}
for(int i = 0; i<n-1;i++){
int a = sc.nextInt();
int b = sc.nextInt();
list[a].add(b);
list[b].add(a);
}
dfs(1);
for(int i = 2;i<=n;i++){
System.out.println(parents[i]);
}
}
public static void dfs(int v){
visit[v] = true;
for(int i : list[v]){
if(!visit[i]){
parents[i] = v;
dfs(i);
}
}
}
}
728x90
'코딩테스트' 카테고리의 다른 글
[백준 14888] 연산자 끼워넣기 [java] (0) | 2021.05.12 |
---|---|
[백준 15652] N과 M (4) [java] (0) | 2021.05.12 |
[백준 9370] 미확인 도착지[java] (0) | 2021.04.08 |
[백준4386] 별자리 만들기 [java] (0) | 2021.03.31 |
[백준 9372] 상근이의 여행 [java] (0) | 2021.03.31 |
댓글