https://www.acmicpc.net/problem/1068
1068번: 트리
첫째 줄에 트리의 노드의 개수 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 0번 노드부터 N-1번 노드까지, 각 노드의 부모가 주어진다. 만약 부모가 없다면 (루트) -1이 주어진다
www.acmicpc.net
풀이
트리 구조를 입력 받기 위해 ArrayList<>의 배열을 사용하였다.
tree = new ArrayList[N];
처음부터 입력을 다 받아 놓고,
노드들의 부모 정보를 저장 받을 때,
애초에 삭제할 노드와 삭제할 노드의 자식 노드의 정보를 저장하지 않았음.
for(int i=0; i<N; i++) {
int parent = Integer.parseInt(st.nextToken());
if(parent==-1) root = i;
else if(i==target || parent==target) continue; // 건너뛰기
else {
tree[parent].add(i);
}
}
그리고 root노드부터 차례로 확인하면서
노드의 ArrayList가 비어있으면 그 노드가 리프 노드
public static void dfs(int root) {
if(tree[root].size()==0) {
count++;
return;
}
for(int i : tree[root]) {
dfs(i);
}
}
(예외)
root노드와 삭제할 노드가 같다면, 마지막에 남는 리프노드는 없다.
if(root==target) count = 0;
전체 코드
package bdfs;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class BOJ_1068_트리 {
static int N, target, root, count;
static ArrayList<Integer>[] tree;
static boolean[] visit;
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
tree = new ArrayList[N];
visit = new boolean[N];
for(int i=0; i<N; i++) {
tree[i] = new ArrayList<>();
}
target = Integer.parseInt(br.readLine());
for(int i=0; i<N; i++) {
int parent = Integer.parseInt(st.nextToken());
if(parent==-1) root = i;
else if(i==target || parent==target) continue; // 건너뛰기
else {
tree[parent].add(i);
}
}
dfs(root);
if(root==target) count = 0;
System.out.println(count);
}
public static void dfs(int root) {
if(tree[root].size()==0) {
count++;
return;
}
for(int i : tree[root]) {
dfs(i);
}
}
}
'코딩테스트 > BOJ' 카테고리의 다른 글
[백준/BOJ] 소문난 칠공주 (Java/자바) (0) | 2023.11.28 |
---|---|
[백준/BOJ] 9461번 파도반 수열 (Java/자바) - DP (1) | 2023.11.23 |
[백준/BOJ] 2012번 등수 매기기 (JAVA/자바) - 그리디(Greedy) (0) | 2023.11.07 |
[백준/BOJ] 1543번 문서검색(JAVA/자바) (0) | 2023.11.07 |
[BOJ/백준] 1138번 한 줄로 서기 (JAVA/자바) (0) | 2023.10.04 |