문제 설명

[본 문제는 정확성과 효율성 테스트 각각 점수가 있는 문제입니다.]

카카오 인턴을 선발하는 코딩 테스트 시험장이 하나의 이진 트리1 형태로 연결되어 있습니다. 아래 그림은 12개의 시험장이 연결된 예시입니다.

img1.png

  1. 하나의 노드는 하나의 시험장을 나타냅니다.
  2. 검은 바탕의 흰 숫자는 해당 시험장의 고유 번호(ID)를 나타냅니다.

    2-1. 시험장이 n개 있다면, 시험장의 고유 번호는 0부터 n-1까지 부여됩니다.

  3. 노드 안의 빨간 숫자는, 해당 시험장의 응시자 수를 나타냅니다.

    3-1. 위의 그림에서, 9번 시험장에는 10명, 4번 시험장에는 8명, 6번 시험장에는 20명의 응시자가 시험을 볼 예정입니다.

  4. 노드 사이의 간선은 해당 시험장이 연결되어 있음을 의미합니다.

    4-1. 위의 그림에서, 9번 시험장은 7번 시험장과, 7번 시험장은 6번 시험장과 연결되어 있습니다.

코딩 테스트를 총괄하는 무지는 안정적인 시험을 위해, 시험장에서 오는 트래픽을 k개의 그룹으로 나누어 각 그룹별 서버로 분산시키기로 하였습니다. 시험장 사이를 연결한 간선들 중 k-1개를 끊어서 시험장을 k 개의 그룹으로 나눌 계획입니다. 이때, 그룹별 최대 트래픽을 최소화하기 위하여 가장 큰 그룹의 인원을 최소화시켜야 합니다.

img2.png

위의 그림에서 7번과 6번 시험장을 잇는 간선을 끊고, 9번과 7번 시험장을 잇는 간선을 끊는다면, 전체 시험장은 3개의 그룹으로 나누어집니다.

  • 주황색 노드로 표시된 A그룹의 인원은 35명(10+8+5+6+1+1+4)
  • 보라색 노드로 표시된 B그룹의 인원은 37명(7+30)
  • 녹색 노드로 표시된 C그룹의 인원은 40명(20+8+12)

즉, 인원이 가장 많은 그룹은 40명입니다. 다른 어떤 방법으로 시험장을 3개의 그룹으로 나눈다고 해도, 인원이 가장 많은 그룹의 인원이 40명 미만이 되도록 나눌 수는 없습니다.

나눌 그룹의 수를 나타내는 정수 k, 각 시험장의 응시자 수를 나타내는 1차원 정수 배열 num, 시험장의 연결 상태를 나타내는 2차원 정수 배열 links가 매개변수로 주어집니다. 인원이 가장 많은 그룹의 인원이 최소화되도록 k개의 그룹으로 나누었을 때, 최소화된 최대 그룹의 인원을 return 하도록 solution 함수를 완성해주세요.


제한사항
  • 1 ≤ k ≤ 10,000
  • knum의 길이 ≤ 10,000
    • num[i]에는 i번 시험장의 응시자 수가 담겨있습니다.
    • 1 ≤ num의 원소 ≤ 10,000
  • links의 길이 = num의 길이
    • links의 i번째 행은 i번 노드(시험장)의 [왼쪽 자식 노드 번호, 오른쪽 자식 노드 번호]입니다.
      • 해당 위치에 자식 노드가 없는 경우 -1이 담겨있습니다.
      • 잘못된 노드 번호나, 하나의 이진 트리 구조가 아닌 입력은 주어지지 않습니다.
정확성 테스트 케이스 제한 사항
  • 1 ≤ k ≤ 20
  • knum의 길이 ≤ 20
효율성 테스트 케이스 제한 사항
  • 주어진 조건 외 추가 제한사항 없습니다.

입출력 예
k num links result
3 [12, 30, 1, 8, 8, 6, 20, 7, 5, 10, 4, 1] [[-1, -1], [-1, -1], [-1, -1], [-1, -1], [8, 5], [2, 10], [3, 0], [6, 1], [11, -1], [7, 4], [-1, -1], [-1, -1]] 40
1 [6, 9, 7, 5] [[-1, -1], [-1, -1], [-1, 0], [2, 1]] 27
2 [6, 9, 7, 5] [[-1, -1], [-1, -1], [-1, 0], [2, 1]] 14
4 [6, 9, 7, 5] [[-1, -1], [-1, -1], [-1, 0], [2, 1]] 9

입출력 예 설명

입출력 예 #1

문제 예시와 같습니다.

입출력 예 #2

img3.png

  • 나눌 그룹의 수가 1개 이므로, 주어진 트리를 나눌 수 없습니다.
  • 보라색 노드로 표시된 유일한 그룹의 인원은 27명입니다.

입출력 예 #3

img4.png

  • 나눌 그룹의 수가 2개 이므로, 그림과 같이 1개의 간선을 끊어서 2개의 그룹으로 나눌 수 있습니다.
  • 보라색 노드로 표시된 그룹은 13명, 주황색 노드로 표시된 그룹은 14명입니다.
  • 따라서, 최대 그룹의 인원은 14명입니다.

입출력 예 #4

img5.png

  • 나늘 그룹의 수가 4개 이므로, 그림과 같이 3개의 모든 간선을 끊어서 4개의 그룹으로 나눌 수 있습니다.
  • 최대 그룹의 인원은 9명입니다.

제한시간 안내
  • 정확성 테스트 : 10초
  • 효율성 테스트 : 언어별로 작성된 정답 코드의 실행 시간의 적정 배수

  1. 이진 트리 : 모든 노드들의 자식 노드가 두 개 이하인 트리 

실행 결과 실행 중지