[LeetCode] Unique Email Addresses

아르당·6일 전

LeetCode

목록 보기
201/213
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

모든 유효한 이메일 주소는 로컬 이름과 도메인 이름이 @ 기호로 구분되어 구성된다. 소문자 외에도 이메일 주소에는 하나 이상의 . 또는 + 기호가 포함될 수 있다.

  • 예를 들어, alice@leetcode.com에 alice는 로컬 이름이고, leetcode.com은 도메인 이름이다.

이메일 주소의 로컬 이름 부분에 마침표를 추가하면 해당 주소로 전송된 메일은 로컬 이름에 마침표가 없는 동일한 주소로 전달된다. 단, 이 규칙은 도메인 이름에는 적용되지 않는다.

  • 예를 들어, alice.z@leetcode.com와 alicez@leetcode.com은 모두 동일한 이메일 주소로 전달된다.

만약 로컬 이름에 +기호가 있다면, 첫 번째 더하기 기호 뒤의 모든 내용은 무시된다. 이를 통해 특정 이메일을 필터링할 수 있다. 단, 이 규칙은 도메인 이름에는 적용되지 않는다.

  • 예를 들어, m.y+name@email.com은 my@email.com으로 전달된다.

이 두 규칙을 동시에 사용할 수 있다.

문자열 배열 emails[i]에 각 이메일 주소로 하나씩 이메일을 보낼 때, 실제로 이메일을 수신한 서로 다른 이메일 주소의 수를 반환해라.

Example

#1
Input: emails = ["test.email+alex@leetcode.com", "test.e.mail+bob.cathy@leetcode.com", "testemail+david@lee.tcode.com"]
Output: 2
Explanation: testemail@leetcode.com과 testemail@lee.tcode.com이 실제로 메일을 수신한다.

#2
Input: emails = ["a@leetcode.com", "b@leetcode.com", "c@leetcode.com"]
Output: 3

Constraints

  • 1 <= emials.length <= 100
  • 1 <= emails[i].length <= 100
  • emails[i]는 영어 소문자, +, ., @로 구성된다.
  • 각 emails[i]는 정확하게 @ 하나만 존재한다.
  • 모든 로컬과 도메인 이름은 비어있지 않다.
  • 로컬 이름은 +로 시작하지 않는다.
  • 도메인 이름은 .com으로 끝난다.
  • 도메인 이름은 .com 앞에 최소 하나의 문자를 포함한다.

Solved

class Solution {
    public int numUniqueEmails(String[] emails) {
        Set<String> result = new HashSet<>();

        for(String email : emails){
            String[] parts = email.split("@");
            String[] local = parts[0].split("\\+");

            result.add(local[0].replace(".", "") + "@" + parts[1]);
        }

        return result.size();
    }
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글