# 1282 Group the People Given the Group Size They Belong To

## Problem Statement

There are `n`

people that are split into some unknown number of groups. Each person is labeled with a **unique ID** from `0`

to `n - 1`

.

You are given an integer array `groupSizes`

, where `groupSizes[i]`

is the size of the group that person `i`

is in. For example, if `groupSizes[1] = 3`

, then person `1`

must be in a group of size `3`

.

Return *a list of groups such that each person i is in a group of size groupSizes[i]*.

Each person should appear in **exactly one group**, and every person must be in a group. If there are multiple answers, **return any of them**. It is **guaranteed** that there will be **at least one** valid solution for the given input.

**Input:** groupSizes = [3,3,3,3,3,1,3]

**Output:** [[5],[0,1,2],[3,4,6]]

## Approach

We are using a Hash Table to store group sizes as a key with a bucket (array) of each persons index as a value. Once one of these buckets has the length that matches the person we push that into the results array and clear out the bucket

## Solution

```
var groupThePeople = function(groupSizes) {
let result = [],
hash = {}
for (const [index, person] of groupSizes.entries()){
hash[person] ? hash[person].push(index) : hash[person] = [index]
if (hash[person].length === person) {
result.push(hash[person]);
hash[person] = [];
}
}
return result
};
```