1. N을 입력받음
2. N개의 수를 입력받고 int형 배열에 저장한 뒤 오름차순 정렬함
3. M을 입력받음
4. int배열과 찾아야 할 값인 target을 인자로 받아 이분탐색하는 함수를 작성함
4-1. low = 0 , high = arr.length-1로 초기화함
4-2. low<=high인 동안 아래 과정을 반복함
4-2-1. mid = (low+high)/2를 계산함
4-2-2. arr[mid] == target인 경우 1을 반환함
4-2-3. 그렇지 않은 경우 low와 high의 값을 적절히 바꿔줌
4-3. 4-2의 반복문이 끝날 때까지 함수가 1을 반환하지 않았다는 건,
target이 arr에 없다는 뜻이므로 0을 반환함
5. 함수가 반환한 값을 출력함
import java.io.*;
import java.util.*;
public class Main{
public static void main(String args[])throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[] arr = new int[N];
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i=0;i<N;i++){
arr[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr);
int M = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine());
for(int i=0;i<M;i++){
int t = Integer.parseInt(st.nextToken());
System.out.print(find(arr,t)+" ");
}
}
static int find(int[] arr, int target){
int low = 0;
int high = arr.length-1;
while(low<=high){
int mid = (low+high)/2;
if(arr[mid]==target){
return 1;
}
else if(arr[mid]>target){
high = mid-1;
}
else{
low = mid+1;
}
}
return 0;
}
}
'[BOJ] - JAVA' 카테고리의 다른 글
[백준] 10789 : 세로읽기 Java (0) | 2024.01.17 |
---|---|
[백준] 1931 : 회의실 배정 JAVA 풀이 (0) | 2022.11.02 |
[백준] 2783 : 삼각 김밥 JAVA 풀이 (0) | 2022.11.02 |
[백준] 1783 : 병든 나이트 JAVA 풀이 (0) | 2022.10.30 |
[백준] 2875 : 대회 or 인턴 JAVA 풀이 (0) | 2022.10.30 |