A perfectly straight street is represented by a number line. The street has building(s) on it and is represented by a 2D integer array `buildings`, where `buildings[i] = [starti, endi, heighti]`. This means that there is a building with `heighti` in the **half-closed segment** `[starti, endi)`.

You want to **describe** the heights of the buildings on the street with the **minimum** number of non-overlapping **segments**. The street can be represented by the 2D integer array `street` where `street[j] = [leftj, rightj, averagej]` describes a **half-closed segment** `[leftj, rightj)` of the road where the **average** heights of the buildings in the **segment** is `averagej`.

*   For example, if `buildings = [[1,5,2],[3,10,4]],` the street could be represented by `street = [[1,3,2],[3,5,3],[5,10,4]]` because:
    *   From 1 to 3, there is only the first building with an average height of `2 / 1 = 2`.
    *   From 3 to 5, both the first and the second building are there with an average height of `(2+4) / 2 = 3`.
    *   From 5 to 10, there is only the second building with an average height of `4 / 1 = 4`.

Given `buildings`, return _the 2D integer array_ `street` _as described above (**excluding** any areas of the street where there are no buldings). You may return the array in **any order**_.

The **average** of `n` elements is the **sum** of the `n` elements divided (**integer division**) by `n`.

A **half-closed segment** `[a, b)` is the section of the number line between points `a` and `b` **including** point `a` and **not including** point `b`.

**Example 1:**

**Input:** buildings = \[\[1,4,2\],\[3,9,4\]\]
**Output:** \[\[1,3,2\],\[3,4,3\],\[4,9,4\]\]
**Explanation:**
From 1 to 3, there is only the first building with an average height of 2 / 1 = 2.
From 3 to 4, both the first and the second building are there with an average height of (2+4) / 2 = 3.
From 4 to 9, there is only the second building with an average height of 4 / 1 = 4.

**Example 2:**

**Input:** buildings = \[\[1,3,2\],\[2,5,3\],\[2,8,3\]\]
**Output:** \[\[1,3,2\],\[3,8,3\]\]
**Explanation:**
From 1 to 2, there is only the first building with an average height of 2 / 1 = 2.
From 2 to 3, all three buildings are there with an average height of (2+3+3) / 3 = 2.
From 3 to 5, both the second and the third building are there with an average height of (3+3) / 2 = 3.
From 5 to 8, there is only the last building with an average height of 3 / 1 = 3.
The average height from 1 to 3 is the same so we can group them into one segment.
The average height from 3 to 8 is the same so we can group them into one segment.

**Example 3:**

**Input:** buildings = \[\[1,2,1\],\[5,6,1\]\]
**Output:** \[\[1,2,1\],\[5,6,1\]\]
**Explanation:**
From 1 to 2, there is only the first building with an average height of 1 / 1 = 1.
From 2 to 5, there are no buildings, so it is not included in the output.
From 5 to 6, there is only the second building with an average height of 1 / 1 = 1.
We cannot group the segments together because an empty space with no buildings seperates the segments.

**Constraints:**

*   `1 <= buildings.length <= 105`
*   `buildings[i].length == 3`
*   `0 <= starti < endi <= 108`
*   `1 <= heighti <= 105`

완벽하게 직선인 거리는 숫자 선으로 표현됩니다. 거리에는 건물이 있으며 2D 정수 배열 `건물`로 표현되는데, 여기서 `건물[i] = [시작, 끝, 높이i]`입니다. 즉, **반쯤 닫힌 세그먼트** `[시작, 끝)`에 `높이`가 있는 건물이 있다는 뜻입니다.

겹치지 않는 **분절**의 **최소** 개수로 거리에 있는 건물의 높이를 **설명**하려고 합니다. 거리는 2차원 정수 배열 'street'로 나타낼 수 있는데, 여기서 'street[j] = [leftj, rightj, averagej]`는 도로의 **반 닫힌 세그먼트** `[왼쪽j, 오른쪽j)`를 나타내며, **세그먼트**에 있는 건물의 **평균** 높이가 `평균j`인 도로를 나타냅니다.

* 예를 들어 `건물 = [[1,5,2],[3,10,4]]`인 경우 길은 `거리 = [[1,3,2],[3,5,3],[5,10,4]]`로 표현할 수 있습니다:
    * 1에서 3까지는 평균 높이가 `2 / 1 = 2`인 첫 번째 건물만 존재합니다.
    * 3에서 5까지는 첫 번째 건물과 두 번째 건물 모두 평균 높이가 `(2+4) / 2 = 3`인 건물이 존재합니다.
    * 5에서 10까지는 평균 높이가 `4 / 1 = 4`인 두 번째 건물만 있습니다.

'건물'이 주어졌을 때, 위에서 설명한 대로 2차원 정수 배열 '거리'를 반환합니다(거리에서 불딩이 없는 영역은 **제외**). 배열은 **어떤 순서로든**_ 반환할 수 있습니다.

'n' 요소의 **평균**은 'n' 요소의 **합계**를 'n'으로 나눈(**정수 나누기**) 값입니다.

반 닫힌 세그먼트** `[a, b]`는 점 `a`와 점 `b` 사이의 숫자 선의 구간으로, 점 `a`를 포함하고 점 `b`를 포함하지 않습니다.

**예제 1:**

**입력:** buildings = \[\[1,4,2\],\[3,9,4\]\]
**Output:** \[\[1,3,2\],\[3,4,3\],\[4,9,4\]\]
**설명:**
1에서 3까지는 평균 높이가 2 / 1 = 2인 첫 번째 건물만 있습니다.
3에서 4까지는 첫 번째 건물과 두 번째 건물 모두 평균 높이가 (2+4) / 2 = 3입니다.
4에서 9까지는 평균 높이가 4 / 1 = 4 인 두 번째 건물 만 있습니다.

**예제 2:**

**Input:** buildings = \[\[1,3,2\],\[2,5,3\],\[2,8,3\]\]
**Output:** \[\[1,3,2\],\[3,8,3\]\]
**설명:**
1에서 2까지는 평균 높이가 2 / 1 = 2인 첫 번째 건물만 있습니다.
2에서 3까지는 평균 높이가 (2+3+3) / 3 = 2인 세 건물이 모두 존재합니다.
3에서 5까지는 두 번째 건물과 세 번째 건물 모두 평균 높이가 (3+3) / 2 = 3입니다.
5에서 8까지는 평균 높이가 3 / 1 = 3 인 마지막 건물 만 있습니다.
1에서 3까지의 평균 높이는 동일하므로 하나의 세그먼트로 그룹화할 수 있습니다.
3에서 8까지의 평균 높이가 동일하므로 하나의 세그먼트로 그룹화할 수 있습니다.

**예제 3:**

**Input:** buildings = \[\[1,2,1\],\[5,6,1\]\]
**Output:** \[\[1,2,1\],\[5,6,1\]\]
**설명:**
1에서 2까지는 평균 높이가 1 / 1 = 1인 첫 번째 건물만 있습니다.
2에서 5까지는 건물이 없으므로 출력에 포함되지 않습니다.
5에서 6까지는 평균 높이가 1 / 1 = 1인 두 번째 건물만 있습니다.
건물이 없는 빈 공간이 세그먼트를 분리하기 때문에 세그먼트를 함께 그룹화할 수 없습니다.

**제약 조건:**

* `1 <= buildings.length <= 105`
* `buildings[i].length == 3`
* `0 <= starti <= endi <= 108`
* `1 <= heighti <= 105`
