본문 바로가기

Algorithm/Leet Code

LeetCode #929 UniqueEmailAddresses. Algorithm,알고리즘,LeetCode,Codefights,CodeSignal,코드파이트,코드시그널,예제,그래프,Graph,example,c++,java,재귀,recursive,datastructure,techinterview,coding,코딩인터뷰,기술면접, 데이터..

LeetCode #929 UniqueEmailAddresses. Algorithm,알고리즘,LeetCode,Codefights,CodeSignal,코드파이트,코드시그널,예제,그래프,Graph,example,c++,java,재귀,recursive,datastructure,techinterview,coding,코딩인터뷰,기술면접, 데이터베이스, sql, query, 쿼리

 

 

Runtime: 32 ms, faster than 78.13% of C++ online submissions for Unique Email Addresses.

 

Memory Usage: 14.3 MB, less than 21.43% of C++ online submissions for Unique Email Addresses.

 

 

 

LeetCode #929

Q.

 Every email consists of a local name and a domain name, separated by the @ sign.

For example, in alice@leetcode.com, alice is the local name, and leetcode.com is the domain name.

Besides lowercase letters, these emails may contain '.'s or '+'s.

 

 모든 이메일은 로컬네임과 도메인네임으로 이루어져 있고 @ 으로 나뉘는 부분이 있다.

예를들면, alice@leetcode.com 에서, alice 는 로컬네임이고, leetcode.com 은 도메인네임이다.

소문자 뿐만 아니라, 이메일에는 '.' 과 '+' 도 있다.

 

 

If you add periods ('.') between some characters in the local name part of an email address, mail sent there will be forwarded to the same address without dots in the local name.  For example, "alice.z@leetcode.com" and "alicez@leetcode.com" forward to the same email address.  (Note that this rule does not apply for domain names.)

 

 로컬네임에서 만약 글자들 사이에 '.' 이 있다면, 로컬네임에서 점이 없는 메일과 똑같은 곳으로 메일이 간다.

예를들면, "alice.z@leetcode.com" 과, "alicez@leetcode.com" 은 똑같은 메일로 보내진다. (도메인네임에는 적용되지 않는다)

 

 

If you add a plus ('+') in the local name, everything after the first plus sign will be ignored. This allows certain emails to be filtered, for example m.y+name@email.com will be forwarded to my@email.com.  (Again, this rule does not apply for domain names.)

It is possible to use both of these rules at the same time.

 

 로컬네임에서 '+' 가 들어가면, 첫번째 + 사인 이후의 글자들은 전부 무시된다. 이건 특정 메일들이 걸러지도록 한다. 예를들면, m.y+name@email.com 은 my@email.com 으로 보내지게 된다. (이것도 도메인네임에는 적용되지 않는 룰이다.)

 

두개의 룰 모두 동시에 적용될 수 있다.

 

 

Given a list of emails, we send one email to each address in the list.  How many different addresses actually receive mails? 

 

 주어진 메일 리스트에서, 각 주소로 하나의 메일만 보낸다. 각각 다른 주소의 메일로 보내질 메일 개수는 몇개인가?

 

 

 

Example 1:

 

Input: ["test.email+alex@leetcode.com","test.e.mail+bob.cathy@leetcode.com","testemail+david@lee.tcode.com"] Output: 2

 

Explanation: "testemail@leetcode.com" and "testemail@lee.tcode.com" actually receive mails

 

 

 

 

Note:

  • 1 <= emails[i].length <= 100
  • 1 <= emails.length <= 100
  • Each emails[i] contains exactly one '@' character.
  • All local and domain names are non-empty.
  • Local names do not start with a '+' character.

 

 

 

Example 1:

 

Input: nums = [5,2,3,1]

Output: [1,2,3,5]

 

 

 

Example 2:

 

Input: nums = [5,1,1,2,0,0]

Output: [0,0,1,1,2,5]

 

 

 

Constraints:

  • 1 <= nums.length <= 50000
  • -50000 <= nums[i] <= 50000

 

 

Process

// Process 
//1. Input email list

//2. Iterate all list

// 2.1. Divide email into localName and domainName

// 2.2. If localName has '+',

//  2.2.1. Substring front of '+'

// 2.3. If localName has '.'

//  2.3.1. Erase all '.'

// 2.4. Put localName + domainName to map as key

//3. Return map size

 

 

// 처리과정

//1. 이메일 리스트를 입력받는다.

//2. 리스트 전체를 반복한다.

// 2.1. 로컬네임과 도메인네임을 분리한다.

// 2.2. 로컬네임에서 '+' 가 있으면,

//  2.2.1. '+' 앞부분까지만 떼어낸다.

// 2.3. 로컬네임에서 '.' 가 있으면,

//  2.3.1. '.' 을 전부 지운다.

// 2.4. 로컬네임과 도메인네임 합쳐서 맵에 키로 넣는다.

//3. 맵 개수 반환한다.

 

 

Code.. lemme see example code!!!

코드.. 예제코드를 보자!!!

 

 

 

class Solution {
public:
    int numUniqueEmails(vector<string>& emails) {
		map<string, int> buffMap;

		for (int i = 0; i < emails.size(); ++i) {
			string mail = emails.at(i);

			size_t atPos = mail.find('@');
			string localName = mail.substr(0, atPos);
			string domain = mail.substr(atPos, mail.size());

			// cout << localName << " " << domain << endl;

			int index = localName.find('+');
			localName = localName.substr(0, index);

			for (int j = 0; j < localName.size(); ++j) {
				if (localName[j] == '.') {
					localName.erase(localName.begin() + j--);
				}
			}

			buffMap.insert(make_pair(localName + domain, 1));
		}

		return buffMap.size();
	}
};

 

 

 

Something else you might like...?

 

 

2018/12/28 - [Programming/Software Architecture] - Perfecting OO's Small Classes and Short Methods. 완벽한 객체지향의 작은 클래스와 짧은 메소드, Book:ThoughtWorks Anthology, Java,cpp,자바,oop,좋은코드,객체지향프로그래밍 - (#9, Tell, Don't Ask)

2018/12/26 - [Programming/Software Architecture] - Perfecting OO's Small Classes and Short Methods. 완벽한 객체지향의 작은 클래스와 짧은 메소드, Book:ThoughtWorks Anthology, Java,cpp,자바,oop,좋은코드,객체지향프로그래밍 (1)

 

 

 

2019/12/19 - [Algorithm/Leet Code] - LeetCode #706 DesignHashMap. Algorithm,알고리즘,LeetCode,Codefights,CodeSignal,코드파이트,코드시그널,예제,그래프,Graph,example,c++,java,재귀,recursive,datastructure,techinterview,coding,코딩인터뷰,기술면접, 데이터베이..

2019/12/11 - [Algorithm/Leet Code] - LeetCode #1047 RemoveAllAdjacentDuplicatesInString. Algorithm,알고리즘,LeetCode,Codefights,CodeSignal,코드파이트,코드시그널,예제,그래프,Graph,example,c++,java,재귀,recursive,datastructure,techinterview,coding,코딩인터뷰,기술..

2019/12/06 - [Algorithm/Leet Code] - LeetCode #844 BackspaceStringCompare. Algorithm,알고리즘,LeetCode,Codefights,CodeSignal,코드파이트,코드시그널,예제,그래프,Graph,example,c++,java,재귀,recursive,datastructure,techinterview,coding,코딩인터뷰,기술면접, 데이..

 

 

 

2019/11/02 - [Algorithm/Code Fights (Code Signal)] - CodeSignal Intro Databases #7 MostExpensive. Algorithm,알고리즘,LeetCode,Codefights,CodeSignal,코드파이트,코드시그널,예제,그래프,Graph,example,c++,java,재귀,recursive,datastructure,techinterview,coding,코딩인터뷰,기술면접, ..

2019/10/31 - [Algorithm/Code Fights (Code Signal)] - CodeSignal Intro Databases #6 VolleyballResults. Algorithm,알고리즘,LeetCode,Codefights,CodeSignal,코드파이트,코드시그널,예제,그래프,Graph,example,c++,java,재귀,recursive,datastructure,techinterview,coding,코딩인터뷰,기술면..

 

 

2019/08/14 - [Life/Item review] - Mi Band 4 review, 미밴드4 후기, 장점, 단점, 리뷰, 한글, global review, 미밴드4 글로벌 후기, 리뷰, 구매, 사용방법, setting, 세팅, ProsNCons

 

 

2018/10/19 - [Programming/Design Pattern ] - Design pattern - Prototype (디자인패턴 - 프로토타입) / Java C++ C#

 

 

2019/01/12 - [Algorithm/Code Fights (Code Signal)] - Aracade Intro #60 sudoku. Algorithm,알고리즘,Codefights,CodeSignal,코드파이트,코드시그널,예제,문제해결능력,example,c++,java,재귀,recursive

2019/01/12 - [Algorithm/Code Fights (Code Signal)] - Aracade Intro #59 spiralNumbers. Algorithm,알고리즘,Codefights,CodeSignal,코드파이트,코드시그널,예제,문제해결능력,example,c++,java,재귀,recursive

 

 

 

2019/01/14 - [Programming/Java] - 자바 메모리 누수 체크/확인/고치는 방법, Memory leak check/fix in Java application, cleanCode/좋은코드/oop/객체지향

 

 

2019/03/31 - [Life/Health care] - 동시에 먹지 말아야 하는 영양제, Health supplements which should not be taken together, 비타민, vitamin, usage/side effects/dosage 효능/부작용/성인,소아 용법

2019/02/10 - [Life/Health care] - 고지방식/키토식/키토제닉/hflc 다이어트 식단, What is the Keto diet/High fat low carb/hflc/ketogenic diet, 효과/효능/부작용/방법/effect/side effect

2019/01/17 - [Life/Health care] - Zinc 아연 usage/side effects/dosage/fatigue/supplement/antioxidant/효능/부작용/성인,소아 용법/건강/피로회복/영양제/항산화

2019/02/16 - [Life/Health care] - Finasteride 피나스테라이드,탈모약 usage/side effects/dosage 효능/부작용/효과/sexual effect/두타스테라이드/프로페시아/propecia/finpecia/카피약/copy drug/hair loss