[백준] 1068 트리 - Java
리스트를 사용해 트리를 구현하고, 지울 요소를 입력받은 후 해당하는 요소를 리스트에서 모두 제거해 준 다음 dfs 돌려서 리프 노드의 수를 탐색해줬다.
리스트에서 indexOf(i) 메서드를 통해 위치를 리스트에 포함된 i의 위치를 얻고, 얻은 위치를 바탕으로 요소를 제거할 수 있었다..
트리를 여러 개의 subtree로 분할한 후 각각의 subtree에 대해 또 subtree로 분할하고.. 이 작업을 자식이 없는 노드가 될 떄 까지 반복한 후 개수를 갱신해 주는 방식으로 풀어도 괜찮을 것 같다. (재귀 느낌으로?)
import java.util.*;
import java.io.*;
import java.math.*;
public class Main {
static int N;
static ArrayList<Integer>[] list;
static int root;
static int delete;
static int cnt;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
list = new ArrayList[N];
for(int i=0; i<N; i++){
list[i] = new ArrayList<>();
}
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i=0; i<N; i++){
int tmp = Integer.parseInt(st.nextToken());
if(tmp == -1){
root = i;
continue;
}
list[tmp].add(i);
}
delete = Integer.parseInt(br.readLine());
for(int i =0; i<N; i++){
if(list[i].contains(delete)){
list[i].remove(list[i].indexOf(delete));
}
}
if(root != delete){
dfs(root, -1);
System.out.println(cnt);
}else{
System.out.println(0);
}
}
static void dfs(int x, int parent){
if(list[x].isEmpty()){
cnt++;
}
for(int y: list[x]){
if(y == parent){
continue;
}
dfs(y,x);
}
}
}
반응형
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준] 3961 터치스크린 키보드 - Java (0) | 2022.06.23 |
---|---|
[백준] 6166 문자열 암호화 - Java (0) | 2022.06.22 |
[백준] 3649 로봇 프로젝트 - Java (0) | 2022.06.12 |
[백준] 5567 결혼식 - Java (0) | 2022.05.28 |
[백준] 2644 촌수계산 - Java (0) | 2022.05.28 |
댓글
이 글 공유하기
다른 글
-
[백준] 3961 터치스크린 키보드 - Java
[백준] 3961 터치스크린 키보드 - Java
2022.06.23 -
[백준] 6166 문자열 암호화 - Java
[백준] 6166 문자열 암호화 - Java
2022.06.22 -
[백준] 3649 로봇 프로젝트 - Java
[백준] 3649 로봇 프로젝트 - Java
2022.06.12 -
[백준] 5567 결혼식 - Java
[백준] 5567 결혼식 - Java
2022.05.28