https://programmers.co.kr/learn/courses/30/lessons/43238
처음 문제를 봤을때는 왜 이분탐색이지? 고민을 좀 하였다.
일단, 입력데이터가 1,000,000,000인 수가 있으므로 완전탐색을 진행하면 바로 시간초과가 날 것이라고 판단하였다.
심지어 1,000,000,000 * 1,000,000,000이라는 수가 저장이 될까도 고민하였지만 파이썬의 정수 범위는 무려 -9223372036854775808 ~ 9223372036854775807 라고 찾았다.
2가지 정도의 생각이 들어갔는데 다음과 같다.
from functools import reduce
def check(mid, times, n):
if n <= reduce(lambda acc, cur: acc + int(mid / cur), times, 0):
return True
return False
def solution(n, times):
answer = 0
max_num = max(times)
left = 0
right = max_num * n
while left < right:
mid = int((left + right) / 2)
if check(mid, times, n):
answer = mid
right = mid
else:
left = mid + 1
return answer