알고리즘
백준 2776번 암기왕 (JAVA)
박카스마시며코딩
2023. 12. 24. 17:22
https://www.acmicpc.net/problem/2776
2776번: 암기왕
연종이는 엄청난 기억력을 가지고 있다. 그래서 하루 동안 본 정수들을 모두 기억 할 수 있다. 하지만 이를 믿을 수 없는 동규는 그의 기억력을 시험해 보기로 한다. 동규는 연종을 따라 다니며,
www.acmicpc.net
저는 구현과 이분탐색 2가지 방법으로 풀었습니다.
구현으로는 Set을 통해 노트1에 있는 숫자를 저장하고, 노트2의 숫자가 노트1에 있는지를 확인하였고, 이분탐색으로는 노트1의 배열을 정렬하고, 이분탐색으로 해당 값이 존재하는지를 확인하여 문제를 풀었습니다.
package BOJ.etc;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import java.util.StringTokenizer;
public class BOJ_2776 {
private static final int FOUND = 1;
private static final int NOT_FOUND = 0;
// public static void main(String[] args) throws Exception {
// BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// int testCnt = Integer.parseInt(br.readLine());
// StringBuffer sb = new StringBuffer();
// for(int t = 0 ; t < testCnt ; t++){
// int n = Integer.parseInt(br.readLine());
//// int[] num1 = new int[n];
// Set<Integer> num = new HashSet<>();
// StringTokenizer st = new StringTokenizer(br.readLine());
// for(int i = 0 ; i < n ; i++){
// num.add(Integer.parseInt(st.nextToken()));
// }
// int m = Integer.parseInt(br.readLine());
// st = new StringTokenizer(br.readLine());
// for(int i = 0 ; i < m ; i++){
// int temp = Integer.parseInt(st.nextToken());
// if(num.contains(temp)){
// sb.append(FOUND+"\n");
// }else{
// sb.append(NOT_FOUND+"\n");
// }
// }
// }
// System.out.println(sb);
// }
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int testCnt = Integer.parseInt(br.readLine());
StringBuffer sb = new StringBuffer();
for (int t = 0; t < testCnt; t++) {
int n = Integer.parseInt(br.readLine());
int[] num = new int[n];
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < n; i++) {
num[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(num);
int m = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine());
for (int i = 0; i < m; i++) {
int temp = Integer.parseInt(st.nextToken());
int index = Arrays.binarySearch(num, temp);
if (index >= 0) {
sb.append(FOUND + "\n");
} else {
sb.append(NOT_FOUND + "\n");
}
}
}
System.out.println(sb);
}
}