[백준] 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
728x90
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 11145번 Is it a Number? Java 문제 풀이 (0) | 2022.02.07 |
---|---|
[백준] 11094번 꿍 가라사대 Java 문제 풀이 (0) | 2022.02.07 |
[백준] 10820번 문자열 분석 Java 문제 풀이 (0) | 2022.02.04 |
[백준] 9996번 한국이 그리울 땐 서버에 접속하지 Java 문제 풀이 (0) | 2022.02.04 |
[백준] 8595번 히든 넘버 Java 문제 풀이 (0) | 2022.02.03 |