
이번에는 양쪽의 교집합을 이진탐색으로 구하는 문제.
그냥 HashMap 으로 풀었는데, 구글링해보니까 이진탐색으로 풀었던 경우도 보았다. 앞 집합에 있는 목록들로, 뒷 집합을 이진탐색하면서 찾아보는 식. 무언가 정공법으로 풀지 못해서 불-편했다. 하지만 이진탐색을 풀 기회는 앞으로도 많을 것이고, 뒷 문제는 이진탐색쪽으로 생각하기로 마음먹으며 그냥 넘어가기로 했다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws NumberFormatException, 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());
HashMap <String, Integer> map = new HashMap<>();
for (int i=0; i<n; i++) {
map.put(br.readLine(), 1);
}
List <String> ans = new ArrayList();
StringBuilder sb = new StringBuilder();
for (int i=0; i<m; i++) {
String bo = br.readLine();
map.put(bo, map.getOrDefault(bo, 0)+1);
if (map.get(bo)==2) {
ans.add(bo);
}
}
Collections.sort(ans);
System.out.println(ans.size());
for (int i=0; i<ans.size(); i++) {
sb.append(ans.get(i) + "\n");
}
System.out.println(sb);
}
}'백준 문제풀이' 카테고리의 다른 글
| 11478. 서로 다른 부분 문자열의 개수 (자바, Java) (0) | 2022.10.10 |
|---|---|
| 1269. 대칭차집합 (자바, Java) (0) | 2022.10.10 |
| 10816. 숫자 카드 2 (자바, Java) (1) | 2022.10.03 |
| 1620. 나는야 포켓몬 마스터 이다솜 (0) | 2022.10.03 |
| 14425. 문자열 집합 (자바, Java) (0) | 2022.10.03 |