ETC/Algorithm
백준, 수 찾기, 1920
coding_genie
2024. 9. 4. 00:54
[유형]
이분탐색
[문제링크]
https://www.acmicpc.net/problem/1920
[요약]
첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들이 A안에 존재하는지 알아내면 된다.
[문제풀이]
이분탐색이지만, set을 사용해서 문제를 해결할 수 있다.
A를 set으로 만들어 탐색을 진행한다.
import sys
def input():
return sys.stdin.readline().rstrip()
N = int(input())
list_N = set(map(int,input().split()))
M = int(input())
list_M = list(map(int,input().split()))
for m in list_M:
if m in list_N:
print("1")
else:
print("0")
문제의 의도대로, 이진탐색으로 문제를 해결할 수 있다.
이 때, list_N의 sort해야한다.
import sys
def input():
return sys.stdin.readline().rstrip()
N = int(input())
list_N = list(map(int,input().split()))
M = int(input())
list_M = list(map(int,input().split()))
list_N.sort()
for m in list_M:
left, right = 0, N-1
flag = 0
while left <= right:
mid = (left+right)//2
if m == list_N[mid]:
flag = 1
print(1)
break
elif m > list_N[mid]:
left = mid+1
else:
right = mid-1
if flag == 0:
print(0)