본문 바로가기
Data Analysis/Query

리트코드 : 1517. Find Users With Valid E-Mails

by 베짱이28호 2024. 8. 29.

리트코드 : 1517. Find Users With Valid E-Mails


문제

Table: Users

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| user_id       | int     |
| name          | varchar |
| mail          | varchar |
+---------------+---------+
user_id is the primary key (column with unique values) for this table.
This table contains information of the users signed up in a website. Some e-mails are invalid.


Write a solution to find the users who have valid emails.

A valid e-mail has a prefix name and a domain where:

The prefix name is a string that may contain letters (upper or lower case), digits, underscore '_', period '.', and/or dash '-'. The prefix name must start with a letter.
The domain is '@leetcode.com'.
Return the result table in any order.

The result format is in the following example.



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 |
+---------+-----------+-------------------------+
Explanation: 
The mail of user 2 does not have a domain.
The mail of user 5 has the # sign which is not allowed.
The mail of user 6 does not have the leetcode domain.
The mail of user 7 starts with a period.
  • 패턴에 맞는 문자열 찾기

문제 풀이

  • 문자열 조건 매칭을 보면 정규표현식 먼저 쓰는게 맞다.

MySQL

SELECT *
FROM USERS
WHERE MAIL REGEXP '^[A-Za-z][A-Za-z0-9._-]*@leetcode\\.com$'

Pandas

import pandas as pd
def valid_emails(users: pd.DataFrame) -> pd.DataFrame:
    return users[users['mail'].str.match(r'^[a-zA-Z][A-Za-z0-9._-]*@leetcode\.com$')]
  • @ 기준으로 split으로 찢는 시도도 해봤는데, 애초에 문자열이 prefix, domain으로 구분되지 않은 경우도 있어서 이는 패스.
  • ^가 시작, $가 끝, [A-Za-z]는 알파벳, [0-9]는 숫자

코멘트

  • 저런 패턴 매칭할 때 \w같은거를 쓰면 시간이 더 줄어들긴 한다.
  • 일단 기본적으로 사용하는 방법만 익혀두기

댓글