반응형
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 | 31 |
Tags
- 핵심
- 싸피
- 14942
- SQL
- 12930
- 프로그래머스
- MySQL
- 설명
- 오블완
- 수료
- 정기 코딩 인증평가
- 퍼즐 조각 채우기
- 10기
- java
- 59409
- 132202
- PCCP
- 142085
- 146355
- softeer
- 백준
- SSAFY
- 후기
- 소프티어
- 조건에 부합하는 중고거래 상태 구하기
- 진료과별 총 예약 횟수 출력하기
- 해결
- 165672
- 59412
- 티스토리챌린지
Archives
- Today
- Total
개발 쥬스
[백준/Java] 1068 트리 본문
반응형
🔗 문제 링크: https://www.acmicpc.net/problem/1068
🔍 해결 과정
트리에서 특정 노드를 제거했을 때 그 특정 노드의 자식까지 전부 삭제를 해준 후 남은 리프 노드의 수를 반환하는 문제이므로 다음과 같은 과정을 세웠습니다.
1️⃣ 트리에서 특정 노드가 리프노드인지 확인할 boolean형 배열 isLeaf를 만든다.
2️⃣ 현재 트리에서 리프 노드를 찾아 isLeaf 배열을 수정한다. 아직 이 땐 특정 노드가 제거되지 않은 상태이다.
3️⃣ 수정한 배열 isLeaf를 활용하여 리프 노드이면 리프 노드의 부모를 계속적으로 거스르며 삭제 제거 대상의 노드가 나오는지 탐색한다.
4️⃣ 리프 노드의 부모들 중 제거 대상의 노드가 존재하지 않으면 리프 노드의 개수를 카운트한다.
노드의 개수의 최댓값도 50이므로 별다른 시간복잡도 생각을 할 필요도 없어서 편하게 구현할 수가 있었습니다.
✏️ 코드
import java.io.*;
import java.util.Arrays;
public class Main {
private static final int NONE = -1;
private static final String SPACE = " ";
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
int[] parent = Arrays.stream(br.readLine().split(SPACE))
.mapToInt(Integer::parseInt)
.toArray();
int removeNumber = Integer.parseInt(br.readLine());
boolean[] isLeaf = new boolean[n];
Arrays.fill(isLeaf, true);
int leafCount = 0;
for (int i = 0; i < n; ++i) {
if (parent[i] == NONE || !isLeaf[parent[i]] || i == removeNumber) {
continue;
}
isLeaf[parent[i]] = false;
}
for (int i = 0; i < n; ++i) {
if (isLeaf[i] && !isRemoveParent(parent, removeNumber, i)) {
++leafCount;
}
}
bw.write(Integer.toString(leafCount));
bw.flush();
bw.close();
}
private static boolean isRemoveParent(final int[] parent,
final int removeNumber, int curNumber) {
while (curNumber != NONE) {
if (curNumber == removeNumber) {
return true;
}
curNumber = parent[curNumber];
}
return false;
}
}
반응형
'알고리즘' 카테고리의 다른 글
[프로그래머스/Java] 피로도 (0) | 2024.08.16 |
---|---|
[백준/Java] 1167 트리의 지름 (0) | 2024.08.16 |
[프로그래머스/Java] 42584 주식 가격 (0) | 2024.08.13 |
[프로그래머스/Java] 42583 다리를 지나는 트럭 (0) | 2024.08.13 |
[백준/Java] 20166 문자열 지옥에 빠진 호석 (0) | 2024.08.12 |