public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while (true){
StringTokenizer st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
if(a==0&&b==0)break;
int cnt = 0;
HashSet<Integer> list = new HashSet<>();
int[] arr = new int[a];
for (int i = 0; i < a ; i++) {
arr[i] = Integer.parseInt(br.readLine());
}
for (int i = 0; i < b; i++) {
if (Arrays.binarySearch(arr,Integer.parseInt(br.readLine()))>=0) {
cnt++;
}
}
System.out.println(cnt);
}
}
}
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while (true){
StringTokenizer st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
if(a==0&&b==0)break;
int cnt = 0;
HashSet<Integer> list = new HashSet<>();
for (int i = 0; i < a ; i++) {
list.add(Integer.parseInt(br.readLine()));
}
for (int i = 0; i < b; i++) {
if (list.contains(Integer.parseInt(br.readLine()))) {
cnt++;
}
}
System.out.println(cnt);
}
}
}
맨처음엔 List를 이용해 입력값을 저장하였는데 시간초과가 계속 떠서 찾아보니 List의 contains 메소드의 실행 시간이 O(n)인 반면 set은 O(1)이었다. 따라서 contains 메소드가 주인 이번문제는 set을 사용해야했다. 그후 binarySearch 메소드도 이용해 봤는데 더 빨라졌다. binarySearch의 시간복잡도는 O(logn)인데 왜 더 빨라졌을까?
아직 binarySearch를 사용할때 왜 더 빨라지는지는 모르겠다.
'코딩 테스트' 카테고리의 다른 글
[SWEA : JAVA] 1251 하나로 (MST, Prim 알고리즘) (0) | 2023.08.29 |
---|---|
[백준 : JAVA] 1753 최단경로 (0) | 2023.08.24 |
[백준 : JAVA] 1929 소수 구하기 (0) | 2023.01.31 |
[백준 : JAVA] 2161 카드1 (0) | 2023.01.22 |
[백준 : JAVA] 9093 단어 뒤집기 (0) | 2023.01.18 |