https://www.acmicpc.net/problem/1764
1764번: 듣보잡
첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다.
www.acmicpc.net
문제 접근
1. List 클래스의 교집합 메소드인 retainsAll() 썼으나 시간 초과
2. ArrayList의 contains() 메소드 쓰니까 시간 초과
3. HashSet 사용 성공 !
HashSet의 contains()는 O(1), ArrayList의 contains()는 O(n)이다. HashSet은 map을 기반으로 구현되고 ArrayList는 indexOf()를 사용해서 contain여부를 결정한다.
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
Set<String> set = new HashSet<>();
while (n-- > 0) {
set.add(br.readLine());
}
List<String> list = new ArrayList<>();
while (m-- > 0) {
String name = br.readLine();
if (set.contains(name)) { // 시간 중요!
list.add(name);
}
}
Collections.sort(list);
StringBuilder sb = new StringBuilder();
sb.append(list.size()).append('\n');
for (String s : list) {
sb.append(s).append('\n');
}
System.out.println(sb);
}
}
'백준' 카테고리의 다른 글
#18870: 좌표 압축 [JAVA] (0) | 2024.03.20 |
---|---|
그래프 문제(bfs,dfs) #2146: 다리 만들기 [JAVA] (1) | 2024.03.16 |
이분탐색/삼분탐색 #2110: 공유기 설치 [JAVA] (0) | 2024.03.09 |
이분탐색/삼분탐색 #2805: 나무 자르기 [JAVA] (2) | 2024.03.08 |
이분탐색/삼분탐색 #10816: 숫자 카드2 [JAVA] (0) | 2024.03.04 |