이분탐색으로 이 문제를 어떻게 풀어야하는지 감이 안잡혀서 다른 사람의 코드를 보았음.
코드를 봐도 잘 이해하기 어려웠음...
‘이분 탐색의 범위는 무엇으로 할지’ 와 ‘이분 탐색의 기준을 무엇으로 할지’를 잡는게 중요하다고 함.
🔗풀이 참고
https://sohee-dev.tistory.com/123
def solution(n, times):
answer = 0
# right는 가장 비효율적으로 심사했을 때 걸리는 시간
# 가장 긴 심사시간이 소요되는 심사관에게 n 명 모두 심사받는 경우이다.
left, right = 1, max(times) * n
while left <= right:
mid = (left+ right) // 2
people = 0
for time in times:
# people 은 모든 심사관들이 mid분 동안 심사한 사람의 수
people += mid // time
# 모든 심사관을 거치지 않아도 mid분 동안 n명 이상의 심사를 할 수 있다면 반복문을 나간다.
if people >= n:
break
# 심사한 사람의 수가 심사 받아야할 사람의 수(n)보다 많거나 같은 경우
if people >= n:
answer = mid
right = mid - 1
# 심사한 사람의 수가 심사 받아야할 사람의 수(n)보다 적은 경우
elif people < n:
left = mid + 1
return answer
🔗프로그래머스 - 입국심사
https://programmers.co.kr/learn/courses/30/lessons/43238