[코딩테스트]/[Pandas]

[LeetCode - Pandas] (Easy) 3465. Find Products with Valid Serial Numbers

잰잰' 2025. 3. 25. 16:12
+--------------+------------+
| Column Name  | Type       |
+--------------+------------+
| product_id   | int        |
| product_name | varchar    |
| description  | varchar    |
+--------------+------------+

이 문제는 주어진 설명을 기준으로 "유효한 시리얼 번호"를 포함하는 제품들을 찾는 SQL 쿼리를 작성하는 문제입니다.

 

유효한 시리얼 번호 패턴에 대한 규칙은 다음과 같습니다:

1. 시리얼 번호는 "SN" 으로 시작합니다(대소문자 구분).

2. 그 뒤에는 정확히 4개의 숫자가 옵니다.

3. 그 뒤에는 하이픈(-)이 오고, 다시 정확히 4개의 숫자가 옵니다.

4. 이 시리얼 번호는 제품 설명(description) 내에 포함되어 있어야 하며, 반드시 설명 내 어디에서든 나타야하 합니다.

 

목표:

- 각 제품의 description에서 유효한 시리얼 번호 패턴을 찾습니다.

- 유효한 시리얼 번호를 포함한 모든 제품을 찾아, product_id 순으로 오름차순으로 정렬합니다.

 

결과 형식:

- 결과 테이블에는 product_id, name, description이 포함되며, product_id 기준으로 오름차순 정렬됩니다.

 

정답

import pandas as pd

def find_valid_serial_products(products: pd.DataFrame) -> pd.DataFrame:
    # 유효한 시리얼 번호의 정규 표현식 패턴 (SN 뒤에 4개의 숫자, 하이픈, 또 4개의 숫자)
    pattern = r'SN\d{4}-\d{4}\b'
    
    # # description 컬럼에서 정규 표현식 패턴을 포함하는 행만 필터링
    ft = products[products['description'].str.contains(pattern, regex=True)]
    
    # # product_id를 기준으로 오름차순으로 정렬
    ft_sorted = ft.sort_values(by='product_id')
    
    # # 결과 반환 (product_id, product_name, description만 포함)
    return ft_sorted[['product_id', 'product_name', 'description']]