백준 실버4 문제입니다. 실전에 대비하기 위해 60분 시간제한을 두고 풀었습니다.
문제
https://www.acmicpc.net/problem/1920
[나의 풀이]
⌛ 10분
def binary_search(A,x):
start = 0
end = len(A)-1
while start<=end:
print("----------")
mid = (start+end)//2
if A[mid]==x:
print(1)
return
elif A[mid]>x:
end = mid-1
else:
start = mid+1
print(0)
N = int(input())
A = list(map(int,input().split()))
M = int(input())
B = list(map(int,input().split()))
A.sort()
for b in B:
binary_search(A,b)
입력된 수의 배열(N) 중 찾고자 하는 숫자(M)가 있는지 판별하는 문제입니다.
입력된 배열을 정렬하고 이분탐색을 구현하여 어렵지 않게 해결할 수 있었습니다.
[다른 사람의 풀이1]
from sys import stdin, stdout
n = stdin.readline()
N = sorted(map(int,stdin.readline().split()))
m = stdin.readline()
M = map(int, stdin.readline().split())
def binary(l, N, start, end):
if start > end:
return 0
m = (start+end)//2
if l == N[m]:
return 1
elif l < N[m]:
return binary(l, N, start, m-1)
else:
return binary(l, N, m+1, end)
for l in M:
start = 0
end = len(N)-1
print(binary(l,N,start,end))
'나의 풀이'와 같이 이분탐색을 활용하되 재귀함수로 구현한 모습입니다.
[다른 사람의 풀이2]
N = int(input())
nArray = set(map(int, input().split()))
M = int(input())
mArray = list(map(int, input().split()))
for i in range(M):
if mArray[i] in nArray:
print("1")
else:
print("0")
실버5 단계의 문제이기 때문에 시간복잡도가 널널하여 단순 loop문을 활용하여 풀어낼 수도 있었습니다.
감사합니다.