티스토리 뷰
728x90
고유한 이메일 주소의 수를 반환하는 문제이다.
단, local파트에서 "."은 있으나 없으나 같은 것으로 치고, +이하는 무시한다.
하지만 domain파트에는 서로 다른 것으로 간주한다.
예를 들어, 아래에서 첫번째와 두번째는 같은 주소로 간주하며, 세번째는 도메인이 다른 주소이다.
String 배열을 매개변수로 받는 numUniqueEmails 메서드의 틀이 주어진다.
Problem :
public class UniqueEmailAddresses {
public int numUniqueEmails(String[] emails) {
}
}
풀이는 주어진 numUniqueEmails 메서드에 작성하면 된다.
Solution :
- 계정에서 고유한 local 부분만 가져온다. ("."은 무시하고, "+" 또는 "@" 이후는 제외한 부분)
- 고유한 local부분을 "@"와 domain부분을 합쳐 HashSet에 담는다.
- 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
'KR > 코딩테스트' 카테고리의 다른 글
[LeetCode/EASY] 760. Find Anagram Mapping (JAVA) : 문제&풀이 (0) | 2021.04.12 |
---|---|
[LeetCode/EASY] 53. Maximum Subarray (JAVA) : 문제&풀이 (0) | 2021.04.12 |
[LeetCode/EASY] 66. Plus One (JAVA) : 문제&풀이 (0) | 2021.04.11 |
[LeetCode/MEDIUM] 973. K Closest Points to Origin (JAVA) : 문제&풀이 (0) | 2021.04.11 |
[LeetCode/EASY] 482. License Key Formatting (JAVA) : 문제&풀이 (0) | 2021.04.11 |