[백준] 18332번 Valid Emails Java 문제 풀이

2022. 2. 4. 18:12알고리즘/백준

728x90
반응형

 

문제풀이

import java.io.*;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

interface Main{
    static void main(String[]a) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        int n = Integer.parseInt(br.readLine());
        String str = "";
        String regex = "^([a-z0-9_\\.]+)@([a-z0-9\\-\\.]+)$";      
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher;
        String tmp1 = "", tmp2 = "";
        Map<String, Set<String>> map = new HashMap<String, Set<String>>();
        for(int i=0; i<n; i++) {
          str = br.readLine().toLowerCase();
          matcher = pattern.matcher(str);
          if(matcher.find()) {
            tmp1 = matcher.group(1);
            tmp2 = matcher.group(2);
            if(tmp1.matches("^\\..*|.*\\.\\..*|.*\\.$") || tmp2.matches("^\\..*|.*\\.\\..*|.*\\.$")) {
              continue;
            }
            
            tmp1 = tmp1.replaceAll("\\.", "");
            if(tmp1.length() >= 6 && tmp1.length() <= 30 && tmp2.length() >= 3 && tmp2.length() <= 30) {
              Set<String> set = map.get(tmp1)==null?new HashSet<String>():map.get(tmp1);
              set.add(tmp2);
              map.put(tmp1, set);
            }
          }
        }
        int cnt = 0;
        for(String key : map.keySet()) {
          cnt += map.get(key).size();
        }
        bw.write(cnt+"");
        bw.flush(); 
    }
}

아이디 부분은 마침표로 시작하거나 마침표가 연속이면 안 됩니다.

도메인 부분은 마침표로 시작하거나 마침표가 연속이면 안 되고 마침표로 끝나도 안됩니다.

 

아이디 부분은 점을 제거하여 남은 글자를 비교합니다.

 

아이디에 해당하는 Set을 만들어서 중복된 값을 제거합니다.

 

각 Key에 해당하는 Value의 개수만 출력하면 정답이 됩니다.

 

 

출처 : https://www.acmicpc.net/problem/18332

 

18332번: Valid Emails

The first line of the input contains a positive integer n (1 ⩽ n ⩽ 1000), the number of the registered email addresses. Each of the next n lines contains one email address of length at most 100 and consisting of alphabets, digits, ‘@’, ‘.’, ‘

www.acmicpc.net

 

728x90
반응형