https://www.acmicpc.net/problem/1764
names = new HashSet<>();
for (int i = 0; i < n; i++) {
names.add(br.readLine());
}
answer = new ArrayList<>();
for (int i = 0; i < m; i++) {
String name = br.readLine();
if (names.contains(name)) answer.add(name);
}
마쳤다면 출력해주면 끝입니다.
HashSet을 썼냐?배열에 듣도 못한 사람의 명단을 넣고 보도 못한 사람의 명단을 입력 받을 때마다 탐색을 해주면 O(N)의 시간을 더 쓰게 됩니다.
그렇게 되면 시간초과가 발생하죠.
하지만 HashSet에 넣어주면, contains()로 탐색을 할 때 O(1)이라는 짧은 시간만 걸려 훨씬 효율적이게 됩니다.
import java.util.*;
import java.io.*;
public class Main_1764 {
static StringBuilder sb = new StringBuilder();
static int n, m;
static Set<String> names;
static List<String> answer;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
names = new HashSet<>();
for (int i = 0; i < n; i++) {
names.add(br.readLine());
}
answer = new ArrayList<>();
for (int i = 0; i < m; i++) {
String name = br.readLine();
if (names.contains(name)) answer.add(name);
}
Collections.sort(answer);
sb.append(answer.size() + "\n");
for (String n : answer) sb.append(n + "\n");
System.out.println(sb.toString());
}
}