[코딩테스트]/[Pandas]

[LeetCode - Pandas] 1517. Find Users With Valid E-Mails

잰잰' 2025. 4. 16. 13:16
Table: Users

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| user_id       | int     |
| name          | varchar |
| mail          | varchar |
+---------------+---------+

user_id는 이 테이블의 기본 키(고유 값이 있는 열)입니다. 이 테이블은 웹사이트에 가입한 사용자들의 정보를 포함하고 있습니다. 일부 이메일은 유효하지 않습니다.

 

문제

유효한 이메일을 가진 사용자들을 찾는 솔루션을 작성하세요.

유효한 이메일은 접두사 이름과 도메인을 가집니다. 접두사 이름은 다음과 같은 문자로 구성된 문자열일 수 있습니다: 대소문자 알파벳, 숫자, 언더스코어 '_', 마침표 '.', 대시 '-'입니다. 접두사 이름은 반드시 알파벳으로 시작해야 합니다. 도메인은 '@leetcode.com'이어야 합니다. 결과 테이블은 임의의 순서로 반환하세요.

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

 

Example 1:

Input: 
Users table:
+---------+-----------+-------------------------+
| user_id | name      | mail                    |
+---------+-----------+-------------------------+
| 1       | Winston   | winston@leetcode.com    |
| 2       | Jonathan  | jonathanisgreat         |
| 3       | Annabelle | bella-@leetcode.com     |
| 4       | Sally     | sally.come@leetcode.com |
| 5       | Marwan    | quarz#2020@leetcode.com |
| 6       | David     | david69@gmail.com       |
| 7       | Shapiro   | .shapo@leetcode.com     |
+---------+-----------+-------------------------+
Output: 
+---------+-----------+-------------------------+
| user_id | name      | mail                    |
+---------+-----------+-------------------------+
| 1       | Winston   | winston@leetcode.com    |
| 3       | Annabelle | bella-@leetcode.com     |
| 4       | Sally     | sally.come@leetcode.com |
+---------+-----------+-------------------------+

설명 :
사용자 2의 이메일에는 도메인이 없습니다.
사용자 5의 이메일에는 허용되지 않은 # 기호가 포함되어 있습니다.
사용자 6의 이메일에는 leetcode 도메인이 없습니다.
사용자 7의 이메일은 마침표로 시작합니다.

 

✏️ 풀이

import pandas as pd

def valid_emails(users: pd.DataFrame) -> pd.DataFrame:
    pattern = r'^[A-Za-z][A-Za-z0-9_.-]+@leetcode.com$'

    return users[users['mail'].str.contains(pattern, regex=True)]

1. 반드시 시작은 알파벳이라고 했기 때문에 ^[A-Za-z] 을 써줘야 한다 (안그러면 오답)

2. 이 후 대소문자, 숫자, '_', '.', '-' 조건을 넣어준다

3. @leetcode.com 으로 끝나는 조건을 넣어준다