[코딩테스트]/[Pandas]

[LeetCode - Pandas] (Easy) 607. Sales Person

잰잰' 2025. 4. 28. 11:43

 

Table: SalesPerson

+-----------------+---------+
| Column Name     | Type    |
+-----------------+---------+
| sales_id        | int     |
| name            | varchar |
| salary          | int     |
| commission_rate | int     |
| hire_date       | date    |
+-----------------+---------+

sales_id는 이 테이블의 기본 키(고유 값이 있는 열)입니다. 이 테이블의 각 행은 판매원의 이름과 ID, 급여, 커미션 비율, 그리고 입사일을 나타냅니다.

Table: Company

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| com_id      | int     |
| name        | varchar |
| city        | varchar |
+-------------+---------+

com_id는 이 테이블의 기본 키(고유 값이 있는 열)입니다. 이 테이블의 각 행은 회사의 이름과 ID, 그리고 회사가 위치한 도시를 나타냅니다.

Table: Orders

+-------------+------+
| Column Name | Type |
+-------------+------+
| order_id    | int  |
| order_date  | date |
| com_id      | int  |
| sales_id    | int  |
| amount      | int  |
+-------------+------+

order_id는 이 테이블의 기본 키(고유 값이 있는 열)입니다.
com_id는 Company 테이블의 com_id를 참조하는 외래 키(참조 열)입니다.
sales_id는 SalesPerson 테이블의 sales_id를 참조하는 외래 키(참조 열)입니다.
이 테이블의 각 행은 하나의 주문에 대한 정보를 포함합니다. 이 정보에는 회사 ID, 판매원 ID, 주문 날짜, 그리고 지불 금액이 포함됩니다.

 

문제

"RED"라는 이름의 회사와 관련된 주문이 없는 모든 판매원의 이름을 찾는 솔루션을 작성하세요.

결과 테이블은 아무 순서로 반환하세요.

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

Example 1:

Input: 
SalesPerson table:
+----------+------+--------+-----------------+------------+
| sales_id | name | salary | commission_rate | hire_date  |
+----------+------+--------+-----------------+------------+
| 1        | John | 100000 | 6               | 4/1/2006   |
| 2        | Amy  | 12000  | 5               | 5/1/2010   |
| 3        | Mark | 65000  | 12              | 12/25/2008 |
| 4        | Pam  | 25000  | 25              | 1/1/2005   |
| 5        | Alex | 5000   | 10              | 2/3/2007   |
+----------+------+--------+-----------------+------------+
Company table:
+--------+--------+----------+
| com_id | name   | city     |
+--------+--------+----------+
| 1      | RED    | Boston   |
| 2      | ORANGE | New York |
| 3      | YELLOW | Boston   |
| 4      | GREEN  | Austin   |
+--------+--------+----------+
Orders table:
+----------+------------+--------+----------+--------+
| order_id | order_date | com_id | sales_id | amount |
+----------+------------+--------+----------+--------+
| 1        | 1/1/2014   | 3      | 4        | 10000  |
| 2        | 2/1/2014   | 4      | 5        | 5000   |
| 3        | 3/1/2014   | 1      | 1        | 50000  |
| 4        | 4/1/2014   | 1      | 4        | 25000  |
+----------+------------+--------+----------+--------+
Output: 
+------+
| name |
+------+
| Amy  |
| Mark |
| Alex |
+------+

설명 :
Orders 테이블의 주문 3번과 4번에 따르면, "RED" 회사에 판매한 판매원은 John과 Pam만 있다는 것을 쉽게 알 수 있습니다. 따라서 테이블에 있는 다른 모든 판매원의 이름을 보고합니다.

 

✏️ 풀이

import pandas as pd

def sales_person(sales_person: pd.DataFrame, company: pd.DataFrame, orders: pd.DataFrame) -> pd.DataFrame:
    df = pd.merge(orders, company[company['name'] == 'RED'], how='inner', on='com_id')['sales_id'].unique()
    df = ~sales_person['sales_id'].isin(df)
    df = sales_person[df]

    return df[['name']]

1. 회사 'RED'와 관련있는 sales_id 찾기

2. 1번sales_id를 제외한 sales_id 찾기