출처: https://www.acmicpc.net/problem/1920
문제
N개의 정수 A[1], A[2], …, A[N]이 주어져 있을 때, 이 안에 X라는 정수가 존재하는지 알아내는 프로그램을 작성하시오.
입력
첫째 줄에 자연수 N(1≤N≤100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1≤M≤100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들이 A안에 존재하는지 알아내면 된다. 모든 정수들의 범위는 int 로 한다.
출력
M개의 줄에 답을 출력한다. 존재하면 1을, 존재하지 않으면 0을 출력한다.
소스코드
import sys
input = sys.stdin.readline
n = int(input())
numN = list(map(int, input().strip().split()))
m = int(input())
numM = list(map(int, input().strip().split()))
def BinarySearch(target, list):
lower = 0
upper = len(list) - 1
while lower <= upper:
mid = (lower + upper) // 2
if list[mid] < target:
lower = mid + 1
elif list[mid] > target:
upper = mid - 1
else:
return True
return False
numN.sort()
for i in range(m):
if BinarySearch(numM[i], numN):
print(1)
else:
print(0)
풀이
이분 탐색으로 해결한 문제.
처음에는 index를 두고 target의 index를 가리킬 때 True를 return하도록 코드를 짰지만 필요 없다는 것을 알고 지웠다.