문제
풀이
알고리즘 문제들을 풀면서 가장 많이 반성하게 된 문제이다.
처음에는 n을 한 명씩 줄여가면서 심사관들에게 배정하는 방식으로 문제를 풀려고 했고, 이 생각에 사로잡혀서 거의 한 시간 동안 묶여 있었던 것 같다. 사실 이 문제는 그렇게 풀면 답을 구할 수가 없다.(아마도)
이 문제는 특정 시간을 준 후에, 심사관들이 이 시간 안에 해결할 수 있는 입국 심사자들 수의 합을 구하는 방법으로 풀어야 한다.
그 합이 n보다 클 경우 시간을 조금 더 줄여가고, 그 합이 n보다 작을 경우 시간을 조금 더 늘려가는 방향으로 이분 탐색을 활용하여 문제를 풀어야 한다.
def solution(n, times):
times = sorted(times)
left = 1
right = times[-1]*n
answer = right
while left<=right:
mid = int((left+right)/2)
total = sum([int(mid/x) for x in times])
if total<n:
left = mid+1
else:
if mid<answer:
answer = mid
right = mid-1
return answer
Reference
http://hsin.hr/coci/archive/2012_2013/contest3_tasks.pdf