백준 1920 - 수 찾기
Updated:
Java
1920 번 - 수 찾기
문제
접근 방법
이진 탐색 연습으로 해결하였다.
자바 라이브러리인 Array.binarySerach()를 사용하여도 되지만, 학습을 위해 직접 코딩하였다.
코드
import java.util.*;
import java.io.*;
public class Main {
static int n, m, result;
static int[] arr;
static List<Integer> rs;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stk;
n = stoi(br.readLine());
arr = new int[n];
stk = new StringTokenizer(br.readLine());
for(int i = 0; i < n; i++) {
arr[i] = stoi(stk.nextToken());
}
Arrays.sort(arr);
rs = new ArrayList<>();
m = stoi(br.readLine());
stk = new StringTokenizer(br.readLine());
for(int i = 0; i < m; i++) {
int curN = stoi(stk.nextToken());
if(binarySearch(curN, 0, arr.length - 1) != -1) {
System.out.println(1);
}
else
System.out.println(0);
}
br.close();
}
static int binarySearch(int target, int low, int high) {
if(low <= high) {
int mid = (low + high) / 2;
if(target == arr[mid]) {
return mid;
}
else if(arr[mid] < target) { // 중간 값 보다, 주어진 값이 더 크면
return binarySearch(target, mid + 1, high);
}
else { // 중간 값 보다 주어진 값이 더 작으면
return binarySearch(target, low, mid - 1);
}
}
return -1;
}
static int stoi(String str) {
return Integer.parseInt(str);
}
}
그 외
한번 Arrays.binarySearch()
를 뜯어 보았는데, 반복문으로 구현해 놓은 것을 보았다.
private static int binarySearch0(int[] a, int fromIndex, int toIndex, int key) {
int low = fromIndex;
int high = toIndex - 1;
while (low <= high) {
int mid = (low + high) >>> 1;
int midVal = a[mid];
if (midVal < key)
low = mid + 1;
else if (midVal > key)
high = mid - 1;
else
return mid; // key found
}
return -(low + 1); // key not found.
}