#2010
Hard Database The number of seniors and juniors to join the company ii
Database
65.9% acceptance
Mar 31, 2026
41
10
No description available.
Solution
Pandas
Time O(1)
Space O(1)
# Table: Candidates
#
# +-------------+------+
# | Column Name | Type |
# +-------------+------+
# | employee_id | int |
# | experience | enum |
# | salary | int |
# +-------------+------+
# employee_id is the column with unique values for this table.
# experience is an ENUM (category) of types ('Senior', 'Junior').
# Each row of this table indicates the id of a candidate, their monthly salary, and their experience.
# The salary of each candidate is guaranteed to be unique.
#
#
#
# A company wants to hire new employees. The budget of the company for the salaries is $70000. The company's criteria for hiring are:
#
# Keep hiring the senior with the smallest salary until you cannot hire any more seniors.
#
# Use the remaining budget to hire the junior with the smallest salary.
#
# Keep hiring the junior with the smallest salary until you cannot hire any more juniors.
#
# Write a solution to find the ids of seniors and juniors hired under the mentioned criteria.
#
# Return the result table in any order.
#
# The result format is in the following example.
#
# Example 1:
# Input:
# Candidates table:
# +-------------+------------+--------+
# | employee_id | experience | salary |
# +-------------+------------+--------+
# | 1 | Junior | 10000 |
# | 9 | Junior | 15000 |
# | 2 | Senior | 20000 |
# | 11 | Senior | 16000 |
# | 13 | Senior | 50000 |
# | 4 | Junior | 40000 |
# +-------------+------------+--------+
# Output:
# +-------------+
# | employee_id |
# +-------------+
# | 11 |
# | 2 |
# | 1 |
# | 9 |
# +-------------+
# Explanation:
# We can hire 2 seniors with IDs (11, 2). Since the budget is $70000 and the sum of their salaries is $36000, we still have $34000 but they are not enough to hire the senior candidate with ID 13.
# We can hire 2 juniors with IDs (1, 9). Since the remaining budget is $34000 and the sum of their salaries is $25000, we still have $9000 but they are not enough to hire the junior candidate with ID 4.
#
# Example 2:
# Input:
# Candidates table:
# +-------------+------------+--------+
# | employee_id | experience | salary |
# +-------------+------------+--------+
# | 1 | Junior | 25000 |
# | 9 | Junior | 10000 |
# | 2 | Senior | 85000 |
# | 11 | Senior | 80000 |
# | 13 | Senior | 90000 |
# | 4 | Junior | 30000 |
# +-------------+------------+--------+
# Output:
# +-------------+
# | employee_id |
# +-------------+
# | 9 |
# | 1 |
# | 4 |
# +-------------+
# Explanation:
# We cannot hire any seniors with the current budget as we need at least $80000 to hire one senior.
# We can hire all three juniors with the remaining budget.
import pandas as pd
def number_of_joiners(candidates: pd.DataFrame) -> pd.DataFrame:
budget = 70000
seniors = candidates[candidates['experience'] == 'Senior'].sort_values('salary')
seniors['cum_salary'] = seniors['salary'].cumsum()
hired_seniors = seniors[seniors['cum_salary'] <= budget]
remaining = budget - (hired_seniors['salary'].sum() if len(hired_seniors) > 0 else 0)
juniors = candidates[candidates['experience'] == 'Junior'].sort_values('salary')
juniors['cum_salary'] = juniors['salary'].cumsum()
hired_juniors = juniors[juniors['cum_salary'] <= remaining]
result = pd.concat([hired_seniors[['employee_id']], hired_juniors[['employee_id']]])
return result