Skip to main content
Back to problems
#2004
Hard Database

The number of seniors and juniors to join the company

Database
46.1% acceptance
Mar 31, 2026
119
15

No description available.

Solution

Pandas
Time O(1)
Space O(1)
LeetCode
solution.pandas
# 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) type of values ('Senior', 'Junior').
# Each row of this table indicates the id of a candidate, their monthly salary, and their experience.
# 
#  
# 
# A company wants to hire new employees. The budget of the company for the salaries is $70000. The company's criteria for hiring are:
# 
# Hiring the largest number of seniors.
# 
# After hiring the maximum number of seniors, use the remaining budget to hire the largest number of juniors.
# 
# Write a solution to find the number 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     | 10000  |
# | 2           | Senior     | 20000  |
# | 11          | Senior     | 20000  |
# | 13          | Senior     | 50000  |
# | 4           | Junior     | 40000  |
# +-------------+------------+--------+
# Output:
# +------------+---------------------+
# | experience | accepted_candidates |
# +------------+---------------------+
# | Senior     | 2                   |
# | Junior     | 2                   |
# +------------+---------------------+
# Explanation:
# We can hire 2 seniors with IDs (2, 11). Since the budget is $70000 and the sum of their salaries is $40000, we still have $30000 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 $30000 and the sum of their salaries is $20000, we still have $10000 but they are not enough to hire the junior candidate with ID 4.
#
# Example 2:
# Input:
# Candidates table:
# +-------------+------------+--------+
# | employee_id | experience | salary |
# +-------------+------------+--------+
# | 1           | Junior     | 10000  |
# | 9           | Junior     | 10000  |
# | 2           | Senior     | 80000  |
# | 11          | Senior     | 80000  |
# | 13          | Senior     | 80000  |
# | 4           | Junior     | 40000  |
# +-------------+------------+--------+
# Output:
# +------------+---------------------+
# | experience | accepted_candidates |
# +------------+---------------------+
# | Senior     | 0                   |
# | Junior     | 3                   |
# +------------+---------------------+
# 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 count_seniors_and_juniors(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.DataFrame({
    'experience': ['Senior', 'Junior'],
    'accepted_candidates': [len(hired_seniors), len(hired_juniors)]
  })
  return result