728x90
이분탐색은 원하는 값이 중간값보다 크다면 오른쪽을 탐색하고 중간값보다 작다면 왼쪽을 탐색하며 원하는 값을 탐색하는 기법입니다.
예를 들어, 1~10까지 상대가 생각한 수를 이분탐색 기법을 사용하여 찾아보겠습니다. 상대가 생각하는 수를 7이라고 생각해봅니다.
중간값 < 원하는 값 up
중간값 > 원하는 값 down
1. 1~10의 중간 값 = 5 -> up
2. 6~10의 중간 값 = 8 -> down
3. 6~8 의 중간 값 = 7 -> 답
입국심사 문제는 입국 심사하는데 걸리는 시간을 최소화하도록 입국 심사 하는 사람들을 심사대에 잘 배분하는 것입니다. 심사하는데 걸리는 시간을 각 심사대가 처리하는 시간으로 나눈 몫을 더하면 입국 심사 하는 사람들의 수가 나옵니다. 이 점을 활용하여 이분 탐색을 실시합니다.
솔루션
def solution(n, times):
left = 1
right = n * min(times)
mid=0
while left < right:
mid = (left+right) // 2
m = 0
for time in times:
m += mid//time
if m >= n:
right = mid
else:
left = mid+1
return left
left를 반환하는 이유는 입국 심사하는데 걸리는 최소한의 시간을 반환해야 하기 때문입니다.
728x90
'알고리즘' 카테고리의 다른 글
[python 그리디(탐욕법)] 구명보트 - 프로그래머스 (0) | 2021.06.04 |
---|---|
[python 그리드] 큰 수 만들기 -프로그래머스 (0) | 2021.06.03 |
[그리디 파이썬] 프로그래머스 알고리즘 풀이 - 조이스틱 (0) | 2021.05.25 |
[힙 python] 프로그래머스 디스크 컨드롤러 (0) | 2021.05.23 |
[python 힙] 프로그래머스 - 더 맵게 (0) | 2021.05.22 |