https://www.acmicpc.net/problem/10815
[난이도]
- Silver 5
[알고리즘]
- 이분탐색
[코드]
import java.io.*;
import java.util.*;
public class Main {
static int N, M;
static int[] sangArr;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
N = Integer.parseInt(br.readLine());
sangArr = new int[N];
st = new StringTokenizer(br.readLine(), " ");
for (int i = 0; i < N; i++) {
sangArr[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(sangArr); // 오름차순 정렬
M = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine(), " ");
for (int i = 0; i < M; i++) {
int num = Integer.parseInt(st.nextToken());
if (binarySearch(num)) {
bw.write("1 ");
} else {
bw.write("0 ");
}
}
bw.flush();
bw.close();
br.close();
}
static boolean binarySearch(int num) {
int leftIndex = 0;
int rightIndex = N - 1;
while (leftIndex <= rightIndex) {
int midIndex = (leftIndex + rightIndex) / 2;
int mid = sangArr[midIndex];
if (num < mid) { // 찾으려는 숫자가 더 작을경우 rightIndex를 mid-1 로 설정
rightIndex = midIndex - 1;
} else if (num > mid) { // 찾으려는 숫자가 더 클경우 leftIndex mid+1 로 설정
leftIndex = midIndex + 1;
} else { // 숫자가 있을 경우
return true;
}
}
return false; // 숫자가 없을 경우
}
}
[풀이]
일반적인 이분탐색 문제이다. midIndex와 mid값이 다르기 때문에 탐색은 인덱스 기준으로하고 찾는 숫자는 arr[midIndex]로 찾는다.
'코딩테스트' 카테고리의 다른 글
백준 10816 : 숫자 카드 2 [JAVA] (0) | 2024.05.19 |
---|---|
백준 2776: 암기왕 [JAVA] (0) | 2024.05.19 |
프로그래머스 1844: 게임 맵 최단거리 [JAVA] (0) | 2024.05.14 |
프로그래머스 159993: 미로 탈출 [JAVA] (1) | 2024.05.12 |
프로그래머스 169199 : 리코쳇 로봇 [JAVA] (0) | 2024.05.11 |