def solution(L, x):
lower = 0
upper = len(L)-1
while lower <= upper:
middle = (lower + upper)//2
if L[middle] == x:
return middle
elif L[middle] > x:
upper = middle-1
elif L[middle] < x:
lower = middle+1
return -1
리스트 L 자체를 바꾸는 코드는 시간이 오래걸린다.
upper, middle, lower의 인덱스만 바꾸면 된다.
계속 자르고 자르다 길이가 1인 리스트가 되어 upper와 lower가 같아지면
upper가 lower보다 작아진다.
def solution(n, times):
lower = 1
upper = max(times)*n
while lower <= upper:
mid = (lower+upper)//2
pnum = 0
for i in times:
pnum += mid//i # mid시간 동안 i time 심사대에서 입국할 수 있는 사람수
# if pnum > n: break
if pnum == n:
return mid
elif pnum > n:
answer = mid
upper = mid-1
elif pnum < n:
lower = mid+1
return answer
def solution(n, times):
lower = 1
upper = max(times)*n
# upper = (len(times)+1) * max(times)
while lower <= upper:
mid = (lower+upper)//2
pnum = 0
for i in times:
pnum += mid//i # mid시간 동안 i time 심사대에서 입국할 수 있는 사람수
if pnum > n: break
if pnum >= n:
answer = mid
upper = mid-1
elif pnum < n:
lower = mid+1
return answer