백준
백준 1920 수 찾기 (자바, 파이썬)
MC류짱
2022. 12. 21. 23:10
풀이 및 해설(주석) [자바]
import java.io.*;
import java.util.*;
public class Main {
public static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(bf.readLine());
int[] arr1 = new int[N];
StringTokenizer st = new StringTokenizer(bf.readLine());
for (int i = 0; i < N; i++) {
arr1[i] = Integer.parseInt(st.nextToken());
}
int M = Integer.parseInt(bf.readLine());
int[] arr2 = new int[M];
st = new StringTokenizer(bf.readLine());
for (int i = 0; i < M; i++) {
arr2[i] = Integer.parseInt(st.nextToken());
}
// binarySearch를 위해 arr1을 정렬
Arrays.sort(arr1);
for (int i = 0; i < M; i++) {
int nowNum = arr2[i];
// binarySearch를 통해 인덱스가 0이상이면 1
if (Arrays.binarySearch(arr1, nowNum) >= 0) {
sb.append("1");
sb.append("\n");
// -정수가 나온 경우 배열에 없다는 의미이므로 0
}else {
sb.append("0");
sb.append("\n");
}
}
System.out.println(sb);
}
}
풀이 [파이썬]
import sys;
def solve(start, end, num):
if start >= end:
print(0)
return
mid = (start+end) // 2
if arr1[mid] == num:
print(1)
return
if arr1[mid] < num:
solve(mid+1, end, num)
else:
solve(start, mid, num)
if __name__ == '__main__':
N = int(sys.stdin.readline().strip())
arr1 = list(map(int, sys.stdin.readline().strip().split()))
M = int(sys.stdin.readline().strip())
arr2 = list(map(int, sys.stdin.readline().strip().split()))
arr1.sort()
for num in arr2:
solve(0, N, num)