김진영이 듣도 못한 사람의 명단과, 보도 못한 사람의 명단이 주어질 때, 듣도 보도 못한 사람의 명단을 구하는 프로그램을 작성하시오.
첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다. 이름은 띄어쓰기 없이 알파벳 소문자로만 이루어지며, 그 길이는 20 이하이다. N, M은 500,000 이하의 자연수이다.
듣도 못한 사람의 명단에는 중복되는 이름이 없으며, 보도 못한 사람의 명단도 마찬가지이다.
듣보잡의 수와 그 명단을 사전순으로 출력한다.
예제 입력1
3 4
ohhenrie
charlie
baesangwook
obama
baesangwook
ohhenrie
clinton
예제 출력1
2
baesangwook
ohhenrie
이 문제는 듣도 못한 사람명단과 보도 못한 사람 명단이 주어졌을 때, 두 명단에서 공통으로 존재하는 사람(듣보잡) 을 찾아 사전순으로 출력해야 한다.
해시셋(HashSet)을 활용하면 평균 O(1) 로 존재 여부를 확인할 수 있다.
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] input = br.readLine().split(" ");
int n = Integer.parseInt(input[0]);
int m = Integer.parseInt(input[1]);
HashSet<String> set = new HashSet<>();
ArrayList<String> result = new ArrayList<>();
for(int i = 0; i < n; i ++) {
set.add(br.readLine());
}
for(int i = 0; i< m; i++) {
String str = br.readLine();
if(set.contains(str)) {
result.add(str);
}
}
Collections.sort(result);
int cnt = result.size();
System.out.println(cnt);
for(int i = 0; i < cnt; i++) {
System.out.println(result.get(i));
}
}
}

가은님 저도 이거 알려주세요 ㅋㅋ