티스토리 뷰

728x90

 

 

고유한 이메일 주소의 수를 반환하는 문제이다.

단, local파트에서 "."은 있으나 없으나 같은 것으로 치고, +이하는 무시한다.

하지만 domain파트에는 서로 다른 것으로 간주한다.

예를 들어, 아래에서 첫번째와 두번째는 같은 주소로 간주하며, 세번째는 도메인이 다른 주소이다.

 

String 배열을 매개변수로 받는 numUniqueEmails 메서드의 틀이 주어진다.

 

Problem : 

public class UniqueEmailAddresses {
    public int numUniqueEmails(String[] emails) {

    }
}

풀이는 주어진 numUniqueEmails 메서드에 작성하면 된다.

 

Solution :

  1. 계정에서 고유한 local 부분만 가져온다. ("."은 무시하고, "+" 또는 "@" 이후는 제외한 부분)
  2. 고유한 local부분을 "@"와 domain부분을 합쳐 HashSet에 담는다.
  3. HashSet은 중복을 제거하고 담으므로 HashSet의 사이즈를 반환한다.
import java.util.HashSet;
import java.util.Set;

public class UniqueEmailAddresses {

    // time complexity : for loop for given Strings -> O(n)
    // space complexity : HashSet for duplication check -> O(n)
    public int numUniqueEmails(String[] emails) {
        Set<String> emailSet = new HashSet<>();
        for (String email : emails) {
            emailSet.add(getLocal(email) + email.substring(email.indexOf("@")));
        }

        return emailSet.size();
    }

    private String getLocal(String email){
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < email.length(); i++){
            if(email.charAt(i) == '.') continue;
            if(email.charAt(i) == '+' || email.charAt(i) == '@') break;
            sb.append(email.charAt(i));
        }
        return sb.toString();
    }
}

 

Complexity :

  • 시간복잡도 (Time Complexity)
    • 주어진 문자열 배열 길이에 따라 for문을 반복하므로 O(n)
  • 공간복잡도 (Space Complexity)
    • 중복 체크를 위해 생성한 HashSet을 생성하므로 O(n)

 

Sample(Test) :

import java.util.HashSet;
import java.util.Set;

public class UniqueEmailAddresses {

    // time complexity : for loop for given Strings -> O(n)
    // space complexity : HashSet for duplication check -> O(n)
    public int numUniqueEmails(String[] emails) {
        Set<String> emailSet = new HashSet<>();
        for (String email : emails) {
            emailSet.add(getLocal(email) + email.substring(email.indexOf("@")));
        }

        return emailSet.size();
    }

    private String getLocal(String email){
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < email.length(); i++){
            if(email.charAt(i) == '.') continue;
            if(email.charAt(i) == '+' || email.charAt(i) == '@') break;
            sb.append(email.charAt(i));
        }
        return sb.toString();
    }

    public static void main(String[] args){
        String[] emails1 = new String[]{
                                        "test.email+alex@leetcode.com",
                                        "test.e.mail+bob.cathy@leetcode.com",
                                        "testemail+david@lee.tcode.com"
                                      };
        String[] emails2 = new String[]{
                                        "a@leetcode.com",
                                        "b@leetcode.com",
                                        "c@leetcode.com"
        };

        UniqueEmailAddresses u = new UniqueEmailAddresses();
        System.out.println(u.numUniqueEmails(emails1));
        System.out.println(u.numUniqueEmails(emails2));
    }
}

 

위 테스트 코드를 실행한 결과는 다음과 같다.

2
3

 

 

 

 

728x90
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
05-05 19:35