Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 백준
- 제네릭
- 프림알고리즘
- 버퍼비우기
- nextInt
- enum
- 최소신장트리
- 17472
- 캡슐화
- 내부 클래스
- 인터페이스
- 다형성
- abstract
- inheritance
- 생성자
- java
- Final
- this
- Scanner
- 열거형
- 추상 클래스
- 객체지향
- 객체 지향
- 추상화
- 상속
- polymorphism
- Encapsulation
- python
- 와일드카드
Archives
- Today
- Total
쫑쫑이의 블로그
백준 1068 트리 Java [DFS] 본문
https://www.acmicpc.net/problem/1068
예제에 없는 조건만 찾으면 빨리 해결할 수 있다
먼저 루트가 0번 인덱스가 고정이 아니다
어떤 노드의 자식 노드가 제거됐을 때 남은 자식 노드가 없으면 리프 노드가 된다
입력값을 이용하여 먼저 root를 찾아주고 인덱스별 자식 노드를 children에 담아주었다
이 때 삭제될 노드는 자식 노드로 넣어주지 않았다
3번 예제가 루트 노드와 삭제 노드가 같은 경우인데
이런 경우에는 큐에 값을 넣지 않아 dfs가 바로 끝나게 만든다
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[] nodes = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
int del = Integer.parseInt(br.readLine());
int root = 0, result = 0;
Queue<Integer> queue = new LinkedList<>();
ArrayList<Integer>[] children = new ArrayList[N];
for (int n = 0; n < N; n++) children[n] = new ArrayList<>();
for (int n = 0; n < N; n++) {
if (nodes[n] == -1) root = n;
else if (n != del) children[nodes[n]].add(n);
}
if (del != root) queue.add(root);
while (!queue.isEmpty()) {
int node = queue.poll();
if (children[node].size() == 0) result++;
else {
for (int child : children[node]) {
queue.add(child);
}
}
}
System.out.println(result);
}
}
'알고리즘 > 백준' 카테고리의 다른 글
백준 3020 개똥벌레 Java [누적합] (0) | 2022.11.30 |
---|---|
백준 20924 트리의 기둥과 가지 Java [DFS] (0) | 2022.11.29 |
백준 11000 강의실 배정 Java [우선순위 큐] (0) | 2022.11.27 |
백준 7662 이중 우선순위 큐 Java [우선순위 큐] (0) | 2022.11.26 |
백준 1516 게임 개발 Java [위상정렬, DP] (0) | 2022.11.25 |