1. 문제
https://www.acmicpc.net/problem/1135
2. 풀이과정
1. 부모 정보를 배열에 받아서 저장한다.
2. 뒷번호부터 검사(leaf노드부터 검사하기 위함)
1) 해당 숫자를 부모로 가진 자식들의 직간접적으로 이어진 자식들의 수를 구해서 정렬한다.
2) 자식들 중 아래에 있는 자식들이 많은 것부터 차례로 순서를 부여한다.
3) 순서 + 아래에 있는 자식들의 수가 가장 큰 값을 해당 숫자에 기록하며 업데이트 해간다.
import java.io.*;
import java.util.*;
public class Main {
static int n, kids[];
public static void updateKids(int kid, int[] p) {
PriorityQueue<Integer> pq = new PriorityQueue<>();
for(int i=0; i<n; i++) {
if(p[i]==kid) {
pq.add(kids[i]);
}
}
int result = 0;
for(int i=pq.size(); i>0; i--) {
result = Math.max(result, i+pq.poll());
}
kids[kid] = result;
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
kids = new int[n];
int p[] = new int[n];
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i=0; i<n; i++) {
p[i] = Integer.parseInt(st.nextToken());
}
//
for(int i=n-1; i>=0; i--) {
updateKids(i, p);
}
System.out.println(kids[0]);
}
}
결과
'코딩문제풀이 > Baekjoon' 카테고리의 다른 글
[Java] 백준 18430번 : 무기 공학* (1) | 2022.11.05 |
---|---|
[Java] 백준 1743번 : 음식물 피하기 (0) | 2022.11.02 |
[Java] 백준 1043번 : 거짓말 (0) | 2022.10.29 |
[Java] 백준 1917번 : 정육면체 전개도* (0) | 2022.08.23 |
[Java] 백준 1113번 : 수영장 만들기* (0) | 2022.08.06 |