[코딩테스트]/[Pandas]

[LeetCode - Pandas] (Easy) 1873. Calculate Special Bonus

잰잰' 2025. 4. 6. 21:48
Table: Employees

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| employee_id | int     |
| name        | varchar |
| salary      | int     |
+-------------+---------+

employee_id는 이 테이블의 기본 키(고유한 값을 가진 열)입니다.
이 테이블의 각 행은 직원 ID, 직원 이름, 급여를 나타냅니다.

 

문제

각 직원의 보너스를 계산하는 솔루션을 작성하세요. 직원의 보너스는 다음 조건에 따라 계산됩니다.

- 직원의 ID가 홀수이고, 직원의 이름이 'M'으로 시작하지 않으면 보너스는 급여의 100%입니다.

- 그 외의 경우에는 보너스가 0입니다.

결과 테이블은 employee_id를 기준으로 정렬하여 반환하세요.

결과 형식은 다음 예시와 같습니다.

Example 1:

Input: 
Employees table:
+-------------+---------+--------+
| employee_id | name    | salary |
+-------------+---------+--------+
| 2           | Meir    | 3000   |
| 3           | Michael | 3800   |
| 7           | Addilyn | 7400   |
| 8           | Juan    | 6100   |
| 9           | Kannon  | 7700   |
+-------------+---------+--------+
Output: 
+-------------+-------+
| employee_id | bonus |
+-------------+-------+
| 2           | 0     |
| 3           | 0     |
| 7           | 7400  |
| 8           | 0     |
| 9           | 7700  |
+-------------+-------+

설명 : 직원 ID가 2와 8인 직원은 employee_id가 짝수이므로 보너스가 0입니다. 직원 ID가 3인 직원은 이름이 'M'으로 시작하므로 보너스가 0입니다. 그 외의 직원들은 급여의 100%를 보너스로 받습니다.

 

✏️ 풀이

import pandas as pd

def calculate_special_bonus(employees: pd.DataFrame) -> pd.DataFrame:
    employees.loc[(employees['employee_id'] % 2 == 0) | (employees['name'].str.startswith('M')), 'salary'] = 0
    
    employees.rename(columns={'salary' : 'bonus'}, inplace=True)

    return employees[['employee_id', 'bonus']].sort_values(by='employee_id')

 

📚 개념정리

loc() ? 원하는 행/열 불러오기

df.loc[행 인덱싱 값, 열 인덱싱 값]

 

startswith() ? 원하는 문자열 로 시작하는 데이터 검색

df[df['컬럼명'].str.startswith('원하는 문자열')]

 

sort_values() ? 데이터 정렬

df.sort_values(by, axis=0, ascending=True, inplace=False)

by : 정렬 기준이 될 컬럼

axis : 0 = index / 1 = columns 정렬할 레이블 설정

ascending : 오름차순, 내림차순 정렬

inplace : 원본 수정 여부