-
이분탐색 알고리즘 문제 : 프로그래머스 LEVEL 3(입국심사))
-
사용 언어 : python
-
해결 날짜 : 2021-05-04
-
해결 방법 :
-
이진 탐색을 위한 시작점과 끝점을 설정한다. 여기서 끝점은 최대 시간의 계산대에서 K명이 전부 계산한 경우이다.
-
이진 탐색을 수행하며 mid시간 안에 있는 계산대 일 때만 계산한 사람의 수를 추가해준다.
-
계산한 사람의 수가 계산이 끝났을 때 계산한 사람의 수가 모자란 경우 더 많은 시간을 부여하고(오른쪽 부분 탐색), 충분한 경우 더 적은 시간을 부여한다(왼쪽 부분 탐색).
-
-
코드
def solution(n, times): # 이진 탐색을 위한 시작점과 끝점 # 끝점은 최대 시간의 심사관한테서 n명이 전부 심사한 경우 start = 0 end = max(times)*n # 이진 탐색 수행 result = 0 while start <= end: total = 0 count = 0 mid = (start + end) // 2 for x in times: # mid 시간안에 있는 심사대에서만 심사 가능 if x <= mid: # 심사받은 사람의 수 계산 count += mid // x # 심사받은 사람의 수가 모자란 경우 더 많은 시간을 부여(오른쪽 부분 탐색) if count < n: start = mid + 1 # 심사받은 사람의 수가 충분한 경우 더 적은 시간을 부여(왼쪽 부분 탐색) else: result = mid # 최소 시간을 찾는 것 이므로 저장해놓음 end = mid - 1 return result
-