코딩문제풀이/Baekjoon
[Java] 백준 1135번 : 뉴스 전하기
코딩하는 포메라니안
2022. 10. 30. 15:43
1. 문제
https://www.acmicpc.net/problem/1135
1135번: 뉴스 전하기
민식이는 회사의 매니저이다. 그리고, 민식이는 회사의 중요한 뉴스를 모든 직원에게 빠르게 전달하려고 한다. 민식이의 회사는 트리 구조이다. 모든 직원은 정확하게 한 명의 직속 상사가 있다
www.acmicpc.net
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]);
}
}
결과